フルスクリーン ボタンのあるアプリケーションがあり、そのボタンがクリックされると、ステージの displayState を に変更しますStageDisplayState.FULL_SCREEN_INTERACTIVE
。
の場合、それはEvent.RESIZE
2回発火しますstage.scaleMode = StageScaleMode.NO_SCALE
。
に戻すと、イベントは 1 回だけ発生しstage.displayState = StageDisplayState.NORMAL
ます。
onResize 関数を直接呼び出すか、カスタム イベントを実装する以外に、Event.RESIZE が 2 回発生するのを防ぐ良い方法を知っている人はいますか?
問題を再現するサンプル コード:
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);
}
}
}
さらに調査すると、フルスクリーンへの切り替えは 2 つのステップのように思わStageDisplayState.NORMAL
れStageDisplayState.FULL_SCREEN_INTERACTIVE
ます。