【问题标题】:Haxe: Handling horizontal scroll eventsHaxe:处理水平滚动事件
【发布时间】:2015-05-12 11:46:54
【问题描述】:

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

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

提前致谢

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

【问题讨论】:

  • 您的目标是什么平台?看起来 Flash 支持没有实现水平组件:github.com/openfl/lime/blob/…
  • @MSGhero 我明白你的意思了。看来deltaX 使用 Lime 永远不会非零。废话。我们目前的目标是 Windows,但很快就会转移到移动空间。有什么建议吗?
  • 您可能会在 openfl 论坛中得到更好的回应。或者在 twitter 上抱怨你的问题。

标签: input mouseevent haxe openfl lime


【解决方案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;
}

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

【讨论】:

  • 感谢您的快速回答。在您上面的方法中,用户交互必须是什么才能启用水平滚动?从表面上看,他们必须按住键盘上的一个键,然后正常滚动(也就是垂直滚动)。如果我错了,请纠正我。
  • 没错,键码18是ALT键,所以按住ALT键可以横向滚动。
  • 酷。我真正想要的是帮助水平滚动的实际硬件输入。请参阅上面的更新。
  • 啊,很抱歉误解了你的问题。我以为您正在寻找代码示例。在那种情况下(我不能 100% 确定 OpenFL 对触摸事件的效果如何,而且我完全不知道)OpenFL 提供了 TouchEvent 类,它允许处理触摸事件,即之前有多少手指触摸屏幕启用滚动。滚动事件由硬件本身处理,因此如果 Lime 是您的主要关注点,则可能需要在 Lime 文档中查找相关信息。
猜你喜欢
  • 1970-01-01
  • 2016-06-10
  • 2018-09-25
  • 2015-03-09
  • 2011-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多