【问题标题】:air/as3 : is there a way yto simulate TouchEvents?air/as3:有没有办法模拟触摸事件?
【发布时间】:2013-12-29 11:22:26
【问题描述】:

有没有办法在 AIR 上模拟 TouchEvent?

我正在开发一款手机游戏:当我在手机上运行游戏时,TOUCHEvents 运行良好。

我想在 AIR 上测试/调试:有没有办法在 AIR 上测试它?

问候

【问题讨论】:

  • 如果不使用 AIR,您如何将游戏部署到“移动”?你能分享一些代码吗?鼠标点击不模拟触摸事件吗?
  • 我确实使用 AIR。我使用 flex: 所以我可以在 DESKTOP(Touchevents 不工作)或移动设备(通过 USB)上运行:Touchevents 工作
  • 您是在模拟器中运行它吗?或者您实际上是在将应用程序部署到桌面吗?您遇到了哪些触摸事件?

标签: actionscript-3 apache-flex air flex4.5 flex4.6


【解决方案1】:

你可以试试这个方法,你可以通过监听 MouseEvent.MOUSE_MOVE、MouseEvent.MOUSE_DOWN 等添加其他触摸事件支持:

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

【讨论】:

    【解决方案2】:

    您可以为 Touch 和 Mouse 添加EventListener 并将它们指向相同的功能。

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

    【讨论】:

    • 这是个糟糕的主意。事件侦听器不是一个轻量级的过程。将任务所需的侦听器数量增加一倍,尤其是在移动设备上,实际上可能会导致性能下降。
    【解决方案3】:

    只需使用MouseEvent 而不是TouchEvent。没有真正的方法可以使用 AIR 模拟器来模拟触摸事件(尽管您可以使用官方的 Android 和 iOS 模拟器来这样做)除了加倍事件侦听器,正如您已经建议的那样,您希望避免这种情况(最好的做法是消除尽可能多的事件侦听器,尤其是在移动设备上)。

    根据我的经验,TouchEventMouseEvent 相比几乎没有任何好处。据我所知,它们可能更精确一些,但我没有证据支持这一点。它还支持来自触控笔之类的接近事件。但是,对于大多数应用来说,没有任何好处。

    MouseEvent 将适用于所有 平台,包括移动设备(移动设备上的触摸也会触发MouseEvents)。因为TouchEventMouseEvent 的映射几乎相同(即TOUCH_TAPCLICKTOUCH_BEGINMOUSE_DOWN)。我目前在 Play Store 中有 8 个 AIR 应用程序,在 iTunes Store 中有 10 个应用程序,但没有一个使用 TouchEvent,尽管有些确实使用了多点触控手势。

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 1970-01-01
      • 2019-11-02
      相关资源
      最近更新 更多