« ASDocの警告を表示しない | メイン | enterFrame イベントの管理 »

2007年8月25日

[as2] AS2のEventDispatcherを使ってみる

27日の月曜日に心斎橋にて開催されるTERACOに参加することになったので。
予習ということで EventDispatcher クラスを使って、ステージサイズを取得するためのクラスを作成してみようと。
サンプル
サンプルソースのダウンロード ( 20070825_stageresize.zip )

今回作ったクラスは「StageResizeManager」というクラス。
詳細は省くけども、使えるメソッドはこの5つ。すべて static 。
setup( width:Number, height:Number, maxSize:Object, minSize:Object ):Void
                                                 setup は1回実行すると削除される
addEventListener( type:String , object:Object ):Void     リスナーを登録
removeEventListener( type:String , object:Object ):Void     登録したリスナーの削除
eventRequest():Void    サイズ変更の有無に関わらず強制的に1回resizeイベントを送信
getSizeInfo():Object    ステージのサイズ情報を取得
で、肝心のイベントは
resized
の1つだけ。
ルートのタイムラインに下記のスクリプトを書いています。
setup の maxSize と minSize はオプション。

var defaultWidth:Number = 550;
var defaultHeight:Number = 350;
var maxSize:Object = { width:800 , height:600 };
var minSize:Object = { width:400 , height:300 };
StageResizeManager.setup( defaultWidth , defaultHeight , maxSize , minSize );

function resizeHandler( event:Object )
{
  var str = "stage resize ---------------------------------\n" ;
  for(var val in event){
    str += "  "+ val +" => "+ event[val]+"\n";
  }
  trac.text = str;
  trace( str );
}
StageResizeManager.addEventListener( "resized" , resizeHandler );

this.onEnterFrame = function()
{
  StageResizeManager.eventRequest();
  delete this.onEnterFrame;
}
ちなみに onEnterFrame を使ってるのは、下層の四角4つの、それぞれのスクリプトの処理が終わった後に実行したいから。
四隅の四角はそれぞれ中のタイムラインに下記のようなスクリプトが書かれてます。
var loc = this;
function resizeHandler( event:Object )
{
    loc._x = event.left;
    loc._y = event.top;
    loc.x.text = loc._x;
    loc.y.text = loc._y;
}
StageResizeManager.addEventListener( "resized" , resizeHandler );

なぜか今日は片言。
月曜日緊張するな~

トラックバック(0)

このブログ記事を参照しているブログ一覧: AS2のEventDispatcherを使ってみる

このブログ記事に対するトラックバックURL: http://system.seyself.com/mt-tb.cgi/431

コメントする


画像の中に見える文字を入力してください。

しばらく時間が経過すると、システム内部と表示されている文字内容に食い違いが発生するようなので、
投稿する前にページをリロードすることをお勧めします。
リロードしてもフォームの内容は維持されます。