0

我最近开始使用 Haxe,如果我的问题有一个明显的答案或者我对问题的描述有点草率,请原谅我,但我会尽力解释它。

我正在使用一台笔记本电脑,它有一个支持多点触控的触控板和一个只有垂直滚轮的普通光学鼠标(那里没有水平点击)。我正在寻找一种处理水平滚动输入/事件的方法。OpenFL 的鼠标事件很好地支持垂直滚动。鼠标滚动和双指触控板滚动都适用于垂直轴。使用这两种输入法中的任何一种都会产生相同的事件,这是可以理解的。但我似乎找不到执行水平滚动时会生成的事件。触控板允许水平滚动,因为网络浏览器会响应命令,但我找不到任何方法让我的程序响应这个输入。Lime 的“onMouseWheel”功能没有 也不响应输入。对于针对 Windows 的应用程序捕获此类输入,你们有什么建议吗?

提前致谢

更新:我在这里寻找的不是如何水平滚动屏幕的问题,而是如何识别来自硬件的水平滚动事件,例如触控板上的两根手指或鼠标中间滚轮的侧向点击. Lime'sonMouseWheel有两个参数deltaXdeltaY,但不会触发返回非零deltaX值的事件。垂直滚动会触发返回deltaX= 0 和deltaY= +/- 1 的事件,但水平滚动甚至不会触发事件。

4

1 回答 1

0

这可以通过多种方式完成。第一种是将事件处理程序添加到要附加事件处理程序的对象实例的鼠标滚轮,因此MouseEvent.MOUSE_WHEEL并使用 delta 变量来确定滚动方向。您可能还需要处理一个按键事件,该事件启用水平滚动而不是垂直滚动。

一些示例代码:

mySprite.addEventHandler(MouseEvent.MOUSE_WHEEL, onScroll);
mySprite.addEventHandler(KeyboardEvent.KEY_DOWN, onKeyDown);
mySprite.addEventHandler(KeyboardEvent.KEY_UP, onKeyUp);

...
private var horizontal:Bool;
private function onScroll(e:MouseEvent):Void
{
    if (e.delta > 0 && horizontal)
        mySprite.scrollRect.x++;
    else if (e.delta < 0 && horizontal)
        mySprite.scrollRect.x--;
}

private function onKeyDown(e:KeyboardEvent):Void
{
    if (e.keyCode == 18)
         horizontal = true;
}

private function onKeyUp(e:KeyboardEvent):Void
{
    if (e.keyCode == 18)
         horizontal = false;
}

您需要在构造函数中的某处定义 scrollRect 以指定精灵的滚动边界。

于 2015-05-12T12:23:09.030 回答