yarek
yarek

Reputation: 12044

air/as3 : is there a way yto simulate TouchEvents?

Is there a way to simulate TouchEvent on AIR ?

I am developping a mobile game: TOUCHEvents work fine when I run the game on mobile.

I would like to test/debug on AIR : is there a way to test it on AIR ?

Regards

Upvotes: 0

Views: 1149

Answers (3)

Josh
Josh

Reputation: 8149

Just use MouseEvent instead of TouchEvent. There is no real way to simulate a touch event using the AIR simulator (though you could use the official Android and iOS simulators to do so) other than doubling event listeners, as suggested already, which you want to avoid (it is best practice to eliminate as many event listeners as possible, especially on mobile).

From my experience, TouchEvent offers little-to-no benefit over MouseEvent. As far as I have been able to tell, they may be a little more precise but I have no evidence to back that up. It also support proximity events from things like a stylus. For the large majority of apps, though, there is no benefit.

MouseEvent will work on all platforms, including mobile (touches on a mobile device also fire off MouseEvents). And because TouchEvent maps out pretty much identically to MouseEvent (i.e. TOUCH_TAP to CLICK, TOUCH_BEGIN to MOUSE_DOWN). I currently have 8 AIR apps in the Play Store and 10 in the iTunes Store and not a single one uses TouchEvent, though some do utilize multitouch gestures.

Upvotes: 0

Doppio
Doppio

Reputation: 2188

You could addEventListener for both Touch and Mouse and point them to same function.

this.addEventListener("touchBegin", onSomethingDown, false, 0 true);
this.addEventListener("mouseDown", onSomethingDown, false, 0 true);


function onSomethingDown(evt:Event):void
{
    var pointDown:Point;

    if (evt.type == "mouseDown") {
        pointDown.x = MouseEvent(evt).stageX;
        pointDown.y = MouseEvent(evt).stageY;
    } else if (evt.type == "touchBegin") {
        pointDown.x = TouchEvent(evt).stageX;
        pointDown.y = TouchEvent(evt).stageY;
    } 
}

Upvotes: 0

Simon Eyraud
Simon Eyraud

Reputation: 2435

You can try this approach, you can add others touch events support by listening MouseEvent.MOUSE_MOVE, MouseEvent.MOUSE_DOWN, etc :

package
{
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.events.TouchEvent;

    public class TestTouchEvent extends Sprite
    {
        public function TestTouchEvent()
        {
            stage.addEventListener( MouseEvent.CLICK, onClick );
            stage.addEventListener( TouchEvent.TOUCH_TAP, onTap );
        }

        protected function onClick( event : MouseEvent ):void
        {
            event.target.dispatchEvent( new TouchEvent( TouchEvent.TOUCH_TAP ) );
        }

        protected function onTap( event : TouchEvent ):void
        {
            trace("Tap event stuff");
        }
    }
}

Upvotes: 1

Related Questions