我最近开始使用haxe,所以如果我的问题有明显的答案,或者我对问题的描述有些马虎,但是我将尽力解释我它。
我正在使用带有多触控轨道垫的笔记本电脑和只有垂直滚动轮的普通光学鼠标(那里没有水平点击)。我正在寻找一种处理水平滚动输入/事件的方法。OpenFL的鼠标事件足以很好地支持垂直滚动。鼠标滚动和两指轨道垫滚动的滚动都可以在垂直轴上工作。当使用这些输入方法中的任何一个,这是可以理解的,似乎会生成同一事件。但是我似乎找不到执行水平滚动时会生成的事件。由于Web浏览器响应该命令,但该轨道垫允许进行水平滚动,但是我找不到任何方法使我的程序响应此输入。Lime的" OnMouseWheel"功能也不响应输入。你们是否有任何建议捕获针对Windows的应用程序的输入的建议?
预先感谢
更新:我在这里寻找的不是如何水平滚动屏幕,而是如何识别来自硬件的水平滚动事件,例如轨道上的两个手指垫子或侧向鼠标中间鼠标。Lime的onMouseWheel
具有两个参数,deltaX
和deltaY
,但是没有触发任何事件可以将非零的deltaX
值归还。垂直滚动发射返回deltaX
= 0和deltaY
= /- 1的事件,但水平滚动甚至不会触发事件。
这可以通过多种方式完成。首先是将事件处理程序添加到鼠标轮中,以将事件处理程序附加到的对象实例,因此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;
}
您需要在构造函数中的某个地方定义滚动条来指定精灵的滚动边界。