ios flash air multi-touch gesture-recognition

¿Cómo escuchar tanto el toque como los gestos al mismo tiempo en Adobe AIR para iOS?



flash multi-touch (3)

No estoy seguro si necesita configurar TOUCH_POINT para hacer tapping básico. Debería funcionar igual si tienes GESTURE configurado. Puedes simularlo con eventos de mouse.

En cualquier caso, la compatibilidad predeterminada con los gestos de AIR no es tan buena, de todos modos, por lo que podría no funcionar de esa manera, por lo tanto, recomendaría buscar en la biblioteca de Gestouch . Obtiene soporte de gestos mucho más sofisticado que funciona muy bien. Lo he estado utilizando en mis proyectos Flex / AS3 durante muchos meses y estoy bastante contento con él.

Estoy haciendo un juego para iOS y necesito una detección simultánea tanto para tocar con el dedo como para hacer gestos (deslizar, etc.). En AIR, solo puedo ver una configuración para el modo de entrada Multitouch: TOUCH_POINT (que funciona para el tapping básico) y GESTURE. Pero necesito ambos al mismo tiempo, así que cambiar el modo no es una opción. ¿Cómo puedo escuchar ambos al mismo tiempo?

Gracias, puedo.


Puede usar eventos de mouse estándar para tocar.

Esto mantendría el modo de entrada multitáctil gesto.

De lo contrario, el marco Gestouch: marco de detección de gestos NUI para el desarrollo de AS3 mouse, táctil y multitáctil en GitHub podría ser de interés.

También tenga en cuenta los impactos de rendimiento del modelo de evento táctil / gesto:

Tanto la entrada táctil como la de gesto pueden ser entradas multitáctiles dependiendo del dispositivo del usuario. ActionScript proporciona API para manejar eventos táctiles, eventos de gestos y eventos táctiles con seguimiento individual para la entrada multitáctil.

Nota: Escuchar eventos táctiles y de gestos puede consumir una cantidad significativa de recursos de procesamiento (equivalentes a renderizar varios fotogramas por segundo), según el dispositivo informático y el sistema operativo. A menudo es mejor utilizar eventos de mouse cuando en realidad no necesita la funcionalidad adicional proporcionada por el tacto o los gestos. Cuando utilice eventos táctiles o de gestos, considere reducir la cantidad de cambios gráficos que pueden ocurrir, especialmente cuando tales eventos se pueden despachar rápidamente, como durante una operación de panorámica, rotación o acercamiento. Por ejemplo, puede detener la animación dentro de un componente mientras el usuario lo cambia de tamaño usando un gesto de acercamiento.


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

Ejemplo:

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