投稿日:2008-12-24 Wed
Pです。初投稿です。as3でやってみました。
package
{
import flash.display.*;
import flash.events.Event;
import flash.text.*;
public class StageCenter extends Sprite
{
public function StageCenter ()
{
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;
stage.addEventListener (Event.RESIZE, resizeHandler);
//起動時にもresizeHandlerを呼び出す
resizeHandler();
}
private function resizeHandler (e:Event = null):void
{
dbgTxt.text = stage.stageWidth + "×" + stage.stageHeight;
x = (stage.stageWidth - 400) / 2;
y = (stage.stageHeight - 300) / 2;
}
}
}
ステージサイズ400×300で背景色は白。
さらにステージサイズと同じサイズの青い矩形を敷いてます。
テキストフィールド(dbgTxt)を配置してます。

プレビューすると、ありゃ??どうもresizeHandlerを通ってない模様。

ググること数分、原因が分かりました。
パブリッシュ設定>HTMLタブ>サイズをパーセントに指定する必要があるようです。
これで、swfが中央に表示されるようになりました。

ここで素朴な疑問が出てきました。
ブラウザサイズを、ステージサイズと同じになるように調整したら
htmlいっぱいにswfが表示されると思ったたのですが
何故か妙なスペースが出来てしまいました。

まあ、ここまでブラウザサイズを小さくする人は希だろうと思い
特に気にすることなくこれで良しとしました。
が、また問題が……
Mac+Safari環境でブラウザサイズの方がswfサイズより大きいにも関わらず
右側にスクロールバーが出現してしまうという現象が発生しました。

この現象を回避するには、パブリッシュされたhtmlをテキストエディタで開き
「body」タグを以下のように書き換えます。
<body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
これで、スクロールバーが出現しなくなりました。

上で放置した「妙なスペース問題」もこれが原因だったようです。
「body」タグの設定をすることで余白が無くなり、妙なスペースが消えました。

と、ここまで長々と書いてきましたが、実はもっと簡単な方法があったのでメモ。
「パブリッシュ設定>HTMLタブ」で以下のように設定します。
サイズ:パーセント
伸縮:拡大・縮小なし
これでスクリプトを一切書くことなくswfが中央に表示されます。
ユーザーがブラウザサイズを変更してもちゃんと着いていきます。
サイズ変更時のイベントを受け取らなくてもよい時はこちらの方がはるかに楽です。
※上に書いた「body」タグの変更は、お好みで。
△ PAGE UP