我正在制作一个 iOS 游戏,我需要同时检测简单的点击和手势(滑动等)。在 AIR 中,我只能看到多点触控输入模式的一项设置:TOUCH_POINT(适用于基本点击)和 GESTURE。但我同时需要两者,所以改变模式不是一种选择。我怎样才能同时听这两个?
谢谢,坎。
我正在制作一个 iOS 游戏,我需要同时检测简单的点击和手势(滑动等)。在 AIR 中,我只能看到多点触控输入模式的一项设置:TOUCH_POINT(适用于基本点击)和 GESTURE。但我同时需要两者,所以改变模式不是一种选择。我怎样才能同时听这两个?
谢谢,坎。
import flash.events.EventDispatcher;
import flash.events.TouchEvent;
import flash.net.Responder;
import flash.ui.Multitouch;
import flash.ui.MultitouchInputMode;
public class SwipeAndTap extends EventDispatcher
{
private var fingerX:int;
private var fingerY:int;
private var elem:Object;
public function SwipeAndTap(_elem:Object)
{
Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;
elem = _elem;
elem.addEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
elem.addEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
elem.addEventListener(TouchEvent.TOUCH_END, onTouchEnd);
}
private function onTouchBegin(e:TouchEvent):void
{
fingerX = e.stageX;
fingerY = e.stageY;
}
private function onTouchMove(e:TouchEvent):void
{
if(e.stageX > (fingerX+150) && (e.stageY > (fingerY-100) && e.stageY < (fingerY+100) ) )
{
// swipe right
dispatchEvent(new TouchSwipeRight(TouchSwipeRight.SWIPE_RIGHT, e));
}
else if(e.stageX < (fingerX-150) && (e.stageY > (fingerY-100) && e.stageY < (fingerY+100) ) )
{
// swipe left
dispatchEvent(new TouchSwipeLeft(TouchSwipeLeft.SWIPE_LEFT, e));
}
}
private function onTouchEnd(e:TouchEvent):void
{
// e.touchPointID;
if(e.stageX > (fingerX-40) && e.stageX < (fingerX+40))
{
dispatchEvent(new TouchEventTap(TouchEventTap.TAP, e));
elem.removeEventListener(TouchEvent.TOUCH_BEGIN, onTouchBegin);
elem.removeEventListener(TouchEvent.TOUCH_MOVE, onTouchMove);
elem.removeEventListener(TouchEvent.TOUCH_END, onTouchEnd);
}
}
}
例子:
var SAT:SwipeAndTap = new SwipeAndTap(stage);
SAT.addEventListener(TouchEventTap.TAP, LangSelected);
SAT.addEventListener(TouchSwipeRight.SWIPE_RIGHT, ENtoPL);
SAT.addEventListener(TouchSwipeLeft.SWIPE_LEFT, PLtoEN);
您可以使用标准鼠标事件进行点击。
这将保持手势多点触控输入模式。
否则,可能会对 Gestouch 框架: GitHub 上用于鼠标、触摸和多点触控 AS3 开发的 NUI 手势检测框架感兴趣。
还要注意触摸/手势事件模型的性能影响:
取决于用户的设备,触摸和手势输入都可以是多点触摸输入。ActionScript 提供用于处理触摸事件、手势事件和单独跟踪的多点触摸输入的触摸事件的 API。
注意:监听触摸和手势事件可能会消耗大量的处理资源(相当于每秒渲染几帧),具体取决于计算设备和操作系统。当您实际上不需要触摸或手势提供的额外功能时,通常最好使用鼠标事件。当您确实使用触摸或手势事件时,请考虑减少可能发生的图形更改量,尤其是当此类事件可以快速调度时,例如在平移、旋转或缩放操作期间。例如,您可以在用户使用缩放手势调整组件大小时停止组件内的动画。
我不太确定您是否需要设置TOUCH_POINT
基本敲击。如果你已经GESTURE
准备好了,它应该也能正常工作。您可以使用鼠标事件来模拟它。
无论如何,默认的 AIR 手势支持并不是那么好,所以它可能无法正常工作,因此我建议查看Gestouch库。你会得到更复杂的手势支持,效果很好。几个月以来,我一直在我的 Flex/AS3 项目中使用它,我对它非常满意。