【问题标题】:Mouse Move fires Mouse Click (Adobe Air)鼠标移动触发鼠标单击 (Adobe Air)
【发布时间】:2011-10-11 13:36:35
【问题描述】:

我正在尝试在 SpriteVisualElement 上添加两个我认为应该非常简单的实现:

Mouse_Move 用于扫描手势和鼠标单击以启用..

所以我的舞台上有 2 个 Eventlistener:

stage.addEventListener(MouseEvent.CLICK, taphandler);
stage.addEventListener(MouseEvent.MOUSE_DOWN, mousedownhandler);

主要问题是屏幕上的每一种类型的扫描也会触发 taphandler()..

关于如何识别正确事件的任何想法?

我只在 (!event.buttondown) 时尝试使用我的水龙头处理程序,但没有成功。

【问题讨论】:

  • Flex 有单独的触摸手势事件,使用它们
  • 手势事件只是给我带来“简单”的滑动识别。我需要在滑动手势期间使用每个位置,我只能通过 TouchEvent 或 MouseEvent 获得。但两者都与点击发生碰撞
  • 看起来您将不得不将 mousedown 事件作为触摸开始,将 mouseup 作为触摸结束。然后你必须编写代码来检查鼠标按下和向上是否发生在一定的时间间隔内(点击),更长的时间间隔(按住)或位置移动(拖动)

标签: apache-flex actionscript air


【解决方案1】:

您需要专门处理 MouseEvent.CLICK 吗?或者您只是想分别处理轻敲和拖动。如果是这种情况,请尝试以下两种方法之一:

MySprite.addEventListener(TouchEvent.TOUCH_TAP, taphandler);
MySprite.addEventListener(PressAndTapGestureEvent.GESTURE_PRESS_AND_TAP, taphandler);

(请注意,这些事件处理程序在您的精灵上,而不是在舞台上)

对于触摸和拖动,请尝试:

Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

MySprite.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
MySprite.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
MySprite.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);

function onTouchBegin(eBegin:TouchEvent) {
     eBegin.target.startTouchDrag(eBegin.touchPointID, false, bg.getRect(this));
     trace("touch begin");

 }

function onTouchMove(eMove:TouchEvent) {
    trace(eMove.stageX);
}

function onTouchEnd(eEnd:TouchEvent) {
     eEnd.target.stopTouchDrag(eEnd.touchPointID);
     trace("touch end");
}

您可能遇到的唯一问题是 TouchEvent.TOUCH_TAP 和 TouchEvent.TOUCH_BEGIN 都可能在您的设备上被解释为 MouseClick.TOUCH,因此如果您的精灵为 MouseClick.TOUCH 附加了一个处理程序,您将有一个冲突。

顺便说一句,这些信息大部分来自Adobe Actionscript 3.0 Reference - TouchEvent

【讨论】:

  • 嗨 eterps,不错的代码,但对我的问题没有任何帮助。甚至没有必要使用多点触控、转换手势或任何其他鼠标事件,因为点击/点击总是在移动时触发。我现在假设每个事件都是点击,但检查它是否更多,并在屏幕上移动时阻止点击。
猜你喜欢
  • 2014-06-19
  • 2017-12-29
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多