「AS3でのフルスクリーン時の座標」でハマった件、実は中途半端だったことがわかりました。ということで追加のメモ書き。
気づきの発端は、せっかくオプションscaleをnoscaleにしているから、ムービーのサイズをHTMLで変更してやれ、と思って変更したことに始まります。
最初ムービーサイズを320×240で制作していたのですが、ビデオプレイヤーの作り上、サイズに依存せず、動的にstage.stageWidthなどで値を読み取って、レイアウトを可変するようにしていたわけです。よってHTMLでwidthとheightを変えれば、すんなり変わってくれるだろう、と思いました。
ところが、実際に変えてみると、640×480の領域の真ん中、320×240の領域に、640×480に拡大されたビデオの左上の320×240の部分だけが表示されてしまうのでした。
そこで、なにかオプションがあるはず、と思って探した結果、salignというオプションでTL(上端と左端にあわせる)という指定を加えることで、見事に640×480の表示がきれいにできました。やれやれ。
ではついでに、最大化も試そうと、最大化ボタンを押したところ、こんどはフルスクリーンには変わったものの、動画全体が左上からはみ出ているような格好になりました。
ピンときました。
フルスクリーン時に真ん中に来るのは、salignのデフォルトの中央配置が生きている時だけなんだ、と思いました。
HTMLでのsalignの指定は、stage.alignで読み取れます。stage.align==””のときには、無指定なので、真ん中に来ているから画面左上座標の補正をする、ってことでいいのではないでしょうか。
ということで、画面の左上、原点の座標(ox,oy)を求めるには、以下のようにする(あらかじめノーマル時のscreenWidth,screenHeightをnormalWidth,normalHeightに代入しておく)。
1 2 3 4 5 6 7 8 |
var ox:Number=0, oy:Number=0; if ( stage.displayState == StageDisplayState.FULL_SCREEN ) { <span style="color: #ff0000;">if ( stage.align == "" ){</span> ox = - ( stage.stageWidth - normalWidth ) / 2; oy = - ( stage.stageHeight - normalHeight ) / 2; <span style="color: #ff0000;">} </span> } |
とりあえずTLで試したら、上記のやり方でうまくいきました。よかったよかった。他のsalignは試していません。