如何在Adobe AIR for iOS中同时监听点按和手势操作?

我正在做一个iOS游戏,我需要同时检测简单的轻敲和手势(滑动等)。 在AIR中,我只能看到多点触控input模式的一个设置:TOUCH_POINT(适用于基本攻丝)和GESTURE。 但我同时需要这两个模式,所以改变模式不是一种select。 我怎样才能同时收听?

谢谢,可以。

您可以使用标准的鼠标事件进行点击。

这将保持手势多点触控input模式。

否则, Gestouch框架:用于鼠标的NUI手势检测框架,在GitHub 触摸和多点触控AS3开发可能是有趣的。

还要注意触摸/手势事件模型的性能影响 :

触摸和手势input都可以是多点触摸input,具体取决于用户的设备。 ActionScript提供了用于处理触摸事件,手势事件以及针对多点触控input的单独跟踪的触摸事件的API。

注意:根据计算设备和操作系统的不同,倾听触摸和手势事件可能会消耗大量的处理资源(相当于每秒渲染几个帧)。 当您不需要触摸或手势提供的额外function时,使用鼠标事件通常会更好。 当您使用触摸或手势事件时,请考虑减less可能发生的graphics更改的数量,尤其是在平移,旋转或缩放操作期间可以快速分派这些事件时。 例如,您可以在用户使用缩放手势resize时停止组件内的animation。

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); 

我不太确定你是否需要设置TOUCH_POINT进行基本攻丝。 如果你有GESTURE设置,它应该也一样。 你可以用鼠标事件来模拟它。

无论如何,默认的AIR手势支持不是那么好,所以它可能不会这样工作,所以我build议寻findGestouch库。 你得到更复杂的手势支持,工作得很好。 我已经在我的Flex / AS3项目中使用了很多个月了,我对此很满意。