0

我有一个带有全屏按钮的应用程序,当单击该按钮时,我将舞台的 displayState 更改为StageDisplayState.FULL_SCREEN_INTERACTIVE.

如果 .那会Event.RESIZE引起两次火灾stage.scaleMode = StageScaleMode.NO_SCALE

如果我改回stage.displayState = StageDisplayState.NORMAL.

除了直接调用 onResize 函数或实现自定义事件之外,任何人都知道防止 Event.RESIZE 触发两次的好方法吗?

重现问题的示例代码:

package test
{
    import flash.display.Sprite;
    import flash.display.StageDisplayState;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.MouseEvent;

    public class Main extends Sprite 
    {

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

        private function init(e:Event = null):void 
        {
            this.removeEventListener(Event.ADDED_TO_STAGE, init);
            stage.addEventListener(Event.RESIZE, onResize);
            stage.scaleMode = StageScaleMode.NO_SCALE;

            var button:Sprite = new Sprite();
            button.mouseEnabled = true;
            button.addEventListener(MouseEvent.CLICK, doResize);
            button.graphics.lineStyle(3,0x00ff00);
            button.graphics.beginFill(0x0000FF);
            button.graphics.drawRect(10, 10, 100, 100);
            button.graphics.endFill();

            this.addChild(button);
        }

        private function doResize(e:MouseEvent) : void {
            if (stage.displayState == StageDisplayState.NORMAL) {
                stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;                
            }
            else {
                stage.displayState = StageDisplayState.NORMAL;
            }           
        }

        private function onResize(e:Event) : void {
            trace("onResize", stage.displayState);
        }       
    }   
}

进一步调查表明,切换到全屏似乎需要两个步骤,首先将大小调整为 a StageDisplayState.NORMAL,然后再调整为StageDisplayState.FULL_SCREEN_INTERACTIVE.

4

2 回答 2

1

似乎这是仅限于调试播放器的错误。

Flash Player 11.1 的调试版本重现了此错误,而 Chrome 版本 11.2 和浏览器插件 11.1 则没有。

于 2012-06-06T12:02:04.920 回答
0

使用布尔值。例如,在 resize 函数中使其为 true 并检查是否不为 true 来执行它。

于 2014-03-29T21:05:25.907 回答