如何修复 Flash 中的触摸延迟?

How can I fix touch lag in Flash?

我在使用 AS3 的 TouchEvent 处理多点触控时遇到了奇怪的行为。触摸在某些情况下会明显滞后,但 Flash 的帧速率不会受到影响。就好像触摸被缓冲了,事件直到触摸几秒钟后才被调度。

我在这里上传了一个演示:https://youtu.be/omkCDqljfio

我只在 Flash Player 的 ActiveX 版本中重现了这种触摸延迟,但我在 Windows 10 和 Windows 7 中都重现了它。所以我在这里有什么是托管我的 AS3 测试套件的 C# 应用程序,但如果在 Internet Explorer 中查看 swf 也可以观察到它。

由于我的应用程序已经涉及在 WPF window 中托管 SWF,我一直在尝试创建一个解决方案,在该解决方案中,触摸在 C# 中接收,然后与 AS3 通信。它会完美地工作,但当触摸 WindowsFormsHost 时,我的 WPF window 似乎没有接收到触摸帧。所以我还有一个问题要解决。

FlashDevelop 项目:https://drive.google.com/file/d/0BxC2eCzurT9rd0gzSGc4TUdQLTQ/view Visual Studio解决方案:https://drive.google.com/file/d/0BxC2eCzurT9rUThmRHBKWHZmbzA/view

AS3 触摸事件:

        Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

        stage.addEventListener(TouchEvent.TOUCH_BEGIN, stage_touchBegin);
        stage.addEventListener(TouchEvent.TOUCH_MOVE, stage_touchMove);
        stage.addEventListener(TouchEvent.TOUCH_END, stage_touchEnd);

创建导致延迟的显示对象,大概是因为触摸事件捕获阶段:

        for (var i:int = 0; i < 500; i++) 
        {
            Dotter.createBGDot(_bgLayer, _shapesOn ? Shape : Sprite);
        }

...

    static public function createBGDot(bgLayer:Sprite, dotClass:Class):void 
    {
        var dot:* = new dotClass();
        var color:Color = new Color();
        color.brightness = Math.random();
        dot.graphics.beginFill(color.color);
        dot.graphics.drawCircle(0, 0, Math.random() * 400 + 40);
        dot.x = Math.random() * bgLayer.stage.stageWidth;
        dot.y = Math.random() * bgLayer.stage.stageHeight;
        bgLayer.addChild(dot);
    }

我知道这是一种不寻常的情况,但我很感激任何有关如何解决这些问题的建议。

既然我已经使用了 Adob​​e Scout,我认为这毕竟是一个渲染问题。帧速率仍然显示 30fps,因为处理时间勉强达到 30fps 标记。降低帧率可以解决问题。

不过,当帧率刚刚下降时,触摸事件会有这么长的延迟,这仍然很奇怪。