[AS3] Stage.stageWidth/Stage.stageHeightの戻り値がウィンドウサイズで変わる [Edit]

ActionScript 3.0のStage.stageWidth/Stage.stageHeightプロパティは、1.0/2.0のStage.width/Stage.heightと同じく、現在のステージ幅と高さを返します。具体的には、Stage.scaleModeプロパティが"noScale"(StageScaleMode.NO_SCALE)に設定されている場合以外は、SWFファイルのドキュメントプロパティに設定されたサイズが返されるべきです(図001)。ところが、Flash Player 9.0r16では、実際にはFlash Playerのウィンドウサイズが返されてしまうようです。

図001■ドキュメントプロパティに設定されたサイズ
FF0609281_001.gif

たとえば、ドキュメントプロパティのサイズを240×180に設定して、その幅と高さのそれぞれ1/2のxy座標にMovieClipインスタンスを設定すれば、ステージ中央に配置されます(図002)。Stage.scaleModeは、"showAll"(StageScaleMode.SHOW_ALL)に設定しておくことにします(「Stage.scaleModeプロパティ」訳者註[*2]参照)。

図002■サイズ240×180のステージ中央に配置されたMovieClip
FF0609281_002.gif
*上図をクリックすると、テスト用SWFがウィンドウで開きます。ウィンドウをリサイズしてからステージをクリックすると、新たなステージサイズを表示し、MovieClipインスタンスを中央に配置し直します。

Flash Player(SWF)のウィンドウをリサイズしてからStage.stageWidth/Stage.stageHeightを調べると、SWFの表示が伸縮しているだけなのにもかかわらず、リサイズされたウィンドウのピクセルサイズを返すようです。しかし、実際にはSWFのサイズは変わっていませんので、取得されたステージサイズをもとにMovieClipインスタンスの座標を再計算すると、中央からずれた位置に配置されてしまいます(図003)。

図003■ウィンドウサイズが返されてMovieClipはステージ中央からずれる
FF0609281_003.gif

ドキュメントによるかぎり、Flash Playerのウィンドウサイズを返すのは、Stage.scaleModeが"noScale"(StageScaleMode.NO_SCALE)のときのみです。したがって、この動作はFlash Player 9.0r16のバグと考えられます。

その他の記事