How to listen for both tap and gestures at the same time in Adobe AIR for iOS?

后端 未结 3 582
没有蜡笔的小新
没有蜡笔的小新 2021-01-07 03:56

I am making an iOS game and I need a detection for both simple tapping and gestures (swipe etc) simultaneously. In AIR, I can only see one setting for the Multitouc

3条回答
  •  暗喜
    暗喜 (楼主)
    2021-01-07 04:26

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

    Example:

    var SAT:SwipeAndTap = new SwipeAndTap(stage);
        SAT.addEventListener(TouchEventTap.TAP, LangSelected);
        SAT.addEventListener(TouchSwipeRight.SWIPE_RIGHT, ENtoPL);
        SAT.addEventListener(TouchSwipeLeft.SWIPE_LEFT, PLtoEN);
    

提交回复
热议问题