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

时间:2017-06-22 19:32:12

标签: actionscript-3 flash activex multi-touch lag

使用AS3的TouchEvent来处理多点触控时,我遇到了奇怪的行为。在某些情况下触摸会相当滞后,但Flash的帧速率不会受到影响。好像触摸得到了缓冲,事件只是在触摸后几秒钟才发送。

我已在此处上传了演示文稿:https://youtu.be/omkCDqljfio

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

由于我的应用程序已经涉及在WPF窗口中托管SWF,我一直在尝试创建一个解决方案,在C#中接收触摸,然后传送到AS3。它可以很好地工作但是当触摸在WindowsFormsHost时,我的WPF窗口似乎没有接收触摸帧。所以我必须解决另一个问题。

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

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

1 个答案:

答案 0 :(得分:0)

现在我已经使用过Adobe Scout,我认为这毕竟是一个渲染问题。帧速率仍然显示30fps,因为处理时间几乎不能达到30fps标记。降低帧速率可以解决问题。

但是,当帧速率刚刚不足时,触摸事件会有如此长的延迟,这仍然很奇怪。