AS3触摸事件滞后并导致不必要的右键单击行为

时间:2017-05-05 20:45:26

标签: actionscript-3 touch windows-10 flash flashdevelop

这可能是一个长镜头,但希望有人可以帮助我。

我在带有10点触摸屏的戴尔Inspiron笔记本电脑上运行Windows 10 64位。我可以触摸触摸事件,但他们并没有按照我所喜欢的方式工作。

首先获得一些初步信息。在触摸屏Windows 10 PC上,尝试触摸并按住背景。透明的白色方块应从小到大补间,表示如果释放该触摸,则会发生右键单击。而不是释放,在其他地方添加第二次触摸。广场应该从大到小消失。这是正常行为,应该发生在具有右键单击功能的任何地方。

现在打开谷歌浏览器(我刚刚更新到新版本58,但我认为任何版本都可以)。按照之前的步骤观看广场消失。现在,在仍然按住手指的同时,再次触摸其他地方,并继续点击。注意尽管已经消失,但是在同一个地方一遍又一遍地补间。如果您释放原始触摸,它会记住触摸释放的点并继续补间该位置的方块。在Chrome中,您可以使用双指点按来调出右键单击菜单,我怀疑这个问题出现在任何有双指轻击右键单击功能的地方。我怀疑这是一个Windows错误而不是Chrome错误。

当我在FlashDevelop中测试我的程序时,会出现同样的问题。当只有一次触摸时,程序响应非常快,但是当有多次触摸时,事件可能会相当滞后。我在四种环境中进行了测试,结果如下:

  • FlashDevelop:白方错误和延迟
  • 独立Flash播放器(投影机):白色方块错误且没有延迟
  • 谷歌浏览器:没有任何触摸事件
  • Internet Explorer:没有白方错误且没有延迟

因此,理想的行为似乎是在Internet Explorer中发生的事情,我希望它能在任何地方发生。我想知道是否有抑制双指触控功能的方法,或者是否有其他方法可以解决此问题(我已经尝试拦截MouseEvent.RIGHT_CLICK事件和它没有用)。这是我的代码:

package
{
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.events.TouchEvent;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.ui.Multitouch;
    import flash.ui.MultitouchInputMode;

    /**
     * ...
     * @author Kyle Delaney
     */
    [Frame(factoryClass="Preloader")]
    public class Main extends Sprite 
    {
        private static var _output_txt:TextField = new TextField();

        public function Main() 
        {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }

        private function init(e:Event = null):void 
        {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            // entry point

            graphics.beginFill(0);

            graphics.drawRect( -5, -5, stage.stageWidth + 5, stage.stageHeight + 5);

            var tf:TextFormat = new TextFormat();
            tf.font = "Courier New";
            tf.size = "14";
            _output_txt.defaultTextFormat = tf;
            _output_txt.wordWrap = true;
            _output_txt.width = stage.stageWidth /2;
            _output_txt.height = stage.stageHeight;
            _output_txt.selectable = false;
            _output_txt.mouseEnabled = false;
            _output_txt.background = true;
            _output_txt.alpha = 0.5;
            addChild(_output_txt);
            print("init()");

            Multitouch.inputMode = MultitouchInputMode.TOUCH_POINT;

            addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);
            addEventListener(TouchEvent.TOUCH_BEGIN, touchBegin);
            addEventListener(TouchEvent.TOUCH_END, touchEnd);
            //addEventListener(TouchEvent.TOUCH_MOVE, touchMove);
            addEventListener(TouchEvent.TOUCH_TAP, touchTap);
        }

        private function touchTap(e:TouchEvent):void 
        {
            print("touchTap() " + e.touchPointID);
        }

        private function touchMove(e:TouchEvent):void 
        {
            print("touchMove() " + e.touchPointID);
        }

        private function touchEnd(e:TouchEvent):void 
        {
            print("touchEnd() " + e.touchPointID);
        }

        private function touchBegin(e:TouchEvent):void 
        {
            print("touchBegin() " + e.touchPointID);
        }

        private function mouseDown(e:MouseEvent):void 
        {
            print("mouseDown");
        }
        public static function print(str:String):void
        {
            if (_output_txt)
            {
                _output_txt.appendText(str + '\n');
                if (_output_txt.length > 10000) _output_txt.replaceText(0, 5000, "");
                _output_txt.scrollV = _output_txt.maxScrollV;
            }
        }
    }

}

以上是swf的上传:http://www.newgrounds.com/dump/item/8eb8b87e551f48db7e0e50c66d3178ff

0 个答案:

没有答案