サイトトップ

Director Flash 書籍 業務内容 プロフィール

Macromedia Flash非公式テクニカルノート

Stage.resizeイベント

ID: FN1006004 Platform: All Version: CS3/ActionScript 3.0 Runtime: Flash Player 9/AIR 1.0

Stageクラス
パッケージ flash.display
継承 Stage → DisplayObjectContainer → InteractiveObject → DisplayObject → EventDispatcher → Object
resizeイベント
概要 ステージの大きさが変わると配信されるイベント。
イベント定数 Event.RESIZE

説明
Stage.resizeイベントは、ステージの大きさが変わると配信されます。EventDispatcher.addEventListener()メソッドには、第1引数のイベント定数としてEvent.RESIZEを指定します。ステージつまりStageオブジェクトに対しては、つぎの3つの設定が必要です。

  1. サイズ   ウィンドウに対してステージが占める割合を[パーセント]で定める。
  2. 伸縮   ステージのサイズが変わっても表示は[拡大・縮小なし]つまり伸縮しない。
  3. Flashの位置   ステージの原点(左上角)をウィンドウの[左][上]に定める[*1]

これらの設定は、[パブリッシュ設定]の[HTML]タブで行えます(図001)。また、2と3はスクリプトでも設定できます。

  1. Stage.scaleModeプロパティを定数StageScaleMode.NO_SCALEに設定する。
  2. Stage.alignプロパティを定数StageAlign.TOP_LEFTに設定する。

図001■[パブリッシュ設定]ダイアログボックスの[HTML]タブ
implicitImports.xml

[*1] 「Flashの位置」の設定に関わらず、Stage.resizeイベントは発生します。しかし、ステージの原点をウィンドウの左上角に合わせないと、配置を決めることが難しくなります。



つぎのフレームアクション(スクリプト001)は、ウィンドウの大きさを変えたとき、タイムライン上のインスタンス(my_mc)をつねに真ん中に置きます。

スクリプト001■インスタンスをつねにウィンドウの真ん中に置く
  1. stage.scaleMode = StageScaleMode.NO_SCALE;
  2. stage.align = StageAlign.TOP_LEFT;
  3. stage.addEventListener(Event.RESIZE, resizeHandler);
  4. resizeHandler(null);
  5. function resizeHandler(eventObject:Event):void {
  6.   var nStageWidth:Number = stage.stageWidth;
  7.   var nStageHeight:Number = stage.stageHeight;
  8.   my_mc.x = nStageWidth / 2;
  9.   my_mc.y = nStageHeight / 2;
  10. }

スクリプト001第3行目が、Stage.resizeイベントにリスナー関数(resizeHandler)を登録しています。リスナー関数(第5〜10行目)は、新たなステージサイズを調べたうえで(第6〜7行目)、インスタンス(my_mc)の位置を中央に定めます(第8〜9行目)。

なお、Stage.resizeイベントは、ウィンドウの大きさを変えなければ発生しません。スクリプト001第4行目は、インスタンスの初期位置をリスナー関数で定めるため、イベントを待つことなく直接呼出しています。ただし、引数にEventオブジェクトを求められるので、データ型の不一致とならないnullを渡しています。

参考
[ActionScript 3.0リファレンスガイド] > [Stage]「resizeイベント

_____

作成者: 野中文雄
更新日: 2010年7月14日 Stage.scaleModeプロパティのリンクをFN1007001に変更。
作成日: 2010年6月24日


Copyright © 2001-2010 Fumio Nonaka.  All rights reserved.