2015-05-12 63 views
0

我最近开始使用Haxe,所以如果我的问题有明显的答案,或者如果我对问题的描述有点草率,我会尽我所能解释它。Haxe:处理水平滚动事件

我正在研究一种具有多点触控支持的触控板的笔记本电脑,以及只有一个垂直滚轮的正常光学鼠标(无水平点击可用)。我正在寻找一种方法来处理水平滚动输入/事件。 OpenFL的鼠标事件足以支持垂直滚动。对于垂直轴,鼠标滚动和双指示垫滚动功能都很好。看起来使用这些输入方法时会生成相同的事件,这是可以理解的。但我似乎无法找到执行水平滚动时会生成的事件。跟踪板允许水平滚动,因为网页浏览器会响应该命令,但我找不到任何方法让我的程序响应此输入。石灰的“onMouseWheel”功能也不响应输入。你们是否有针对Windows的应用程序捕获这种输入的建议?

在此先感谢

UPDATE:我正在寻找在这里不是如何水平滚动屏幕,但如何认识水平滚动事件从硬件来一个问题,比如两个手指在轨迹板上或鼠标中间轮的侧面点击。酸橙的onMouseWheel有两个参数,deltaXdeltaY,但没有触发任何事件返回非零值deltaX值。垂直滚动触发一个事件,返回deltaX = 0和deltaY = +/- 1,但水平滚动甚至不触发事件。

+0

你定位的是哪个平台?它看起来像Flash支持没有实现水平组件:https://github.com/openfl/lime/blob/2d3f51d2a4413069b221269da3e084c9b905caa6/lime/_backend/flash/FlashApplication.hx#L218 – MSGhero

+0

@ MSGhero我明白你的意思。看来,'deltaX'永远不会是非零的。废话。 我们目前的目标是Windows,但很快就会转向移动领域。有什么建议么? – Scratch17

+0

你可能会在openfl论坛中得到更好的回应。或者通过在Twitter上抱怨你的问题。 – MSGhero

回答

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的某处指定精灵的滚动发展。

+0

感谢您的快速回答。在上面的方法中,用户交互必须是什么才能启用水平滚动?通过它的外观,他们将不得不按住键盘上的一个键,然后正常滚动(又称为垂直)。如果我错了,请纠正我。 – Scratch17

+0

这是正确的,关键代码18是ALT的关键,因此按住ALT键将启用水平滚动。 – tienery

+0

很酷。我实际上在寻找的是有关水平滚动的实际硬件输入的帮助。看到上面的更新。 – Scratch17