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

时间:2012-08-02 00:17:44

标签: ios flash air multi-touch gesture-recognition

我正在制作iOS游戏,我需要检测简单的点击和手势(滑动等)同时。在AIR中,我只能看到多点触控输入模式的一个设置:TOUCH_POINT(适用于基本点击)和GESTURE。但我同时需要两个,所以改变模式不是一个选择。我怎么能同时听这两个?

谢谢, 可以。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

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

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

否则,GitHub上的Gestouch framework: NUI gestures detection framework for mouse, touch and multitouch AS3 development可能会引起人们的兴趣。

另请注意触摸/手势事件模型的performance impacts

  

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

     

注意:聆听触摸和手势事件会消耗很多   处理资源量(相当于渲染多个帧)   每秒),取决于计算设备和操作系统。   当您实际不需要时,通常最好使用鼠标事件   触摸或手势提供的额外功能。当你使用时   触摸或手势事件,考虑减少图形量   可能发生的更改,尤其是在可以调度此类事件时   快速,如平移,旋转或缩放操作。例如,你   可以在用户调整组件大小时停止组件内的动画   使用缩放手势。