我有一个带有全屏按钮的应用程序,当单击该按钮时,我将stage的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);
}
}
}进一步的调查显示,似乎切换到全屏有两个步骤,首先是调整大小到StageDisplayState.NORMAL,然后是StageDisplayState.FULL_SCREEN_INTERACTIVE。
发布于 2012-06-06 20:02:05
看起来这是一个调试播放器的bug。
调试版本的Flash Player 11.1会重现此错误,而Chrome版本11.2和浏览器插件11.1则不会。
发布于 2014-03-30 05:05:26
使用布尔值。例如,在resize函数中将其设为true,并检查执行该函数是否为true。
https://stackoverflow.com/questions/10913432
复制相似问题