as3: 2008年3月アーカイブ

メンバーに対してイベント通知を促すクラスです。
ソースファイル

例えば Shapeオブジェクトにマウスイベントくっつけたり、
Timerオブジェクトに enterFrame イベントくっつけたりするのに使います。

まず通知元オブジェクトを登録した EventMediator オブジェクトを作成します。
作成した EventMediator オブジェクトに通知メンバーを登録します。
通知元オブジェクトがイベントを通知(dispatchEvent の実行)すると、
メンバーの各オブジェクトも同じイベントを通知するようになります。

import flash.events.Event;
import flash.net.URLLoader;
import flash.utils.Timer;
import flash.display.Sprite;

import com.seyself.events.EventMediator;

var madiator:EventMediator = new EventMediator( new Sprite() );
var urlLoader:URLLoader = new URLLoader();
var timer:Timer = new Timer(1);

madiator.addEventListener( "enterFrame" , null );
madiator.member = [urlLoader,timer];

urlLoader.addEventListener( "enterFrame" , enterFrameHandler );
timer.addEventListener( "enterFrame" , enterFrameHandler );
function enterFrameHandler( event:Event ):void
{
    trace(event.target);
    event.target.removeEventListener( "enterFrame" , arguments.callee );
    //madiator.removeEventListener( "enterFrame", enterFrameHandler );
}
上記のコードの場合、出力結果は以下のようになります。
[object URLLoader]
[object Timer]

TimerクラスやURLLoaderクラスは、もともとenterFrameイベントを持っていませんが
登録しておくと、これらのオブジェクトがenterFrameイベントを通知するようになります。

一応 fla ファイルも置いときます。
demo.fla
demo2.fla
AS3向けのフレームワーク「Progression」がなんだか便利みたいなので、自分も慣れておこうと思った。

とにかく手探りなので、まずは Wiki のチュートリアルを、と思ったら、チュートリアルもまだほとんど準備中だった。
なもんで、とりあえずリファレンスとソースを行き来しながら作ってみた。

作ってみたやつ

一応ソースファイルも一式アップしときます。
恥ずかしいソースファイルのダウンロード

まず組み立て方がよくわからなくて困った。たったこれだけのコンテンツなのに、クラスファイルが錯綜してます。

何気に、右クリックの「新規ウィンドウで開く」がすごいと思った。
Event系のクラスの toString の実装が直接文字列を返すようになってるのは何でなんだろう。

あと、イベントの順番のメモ
sceneStateChange → load → init
goto → unload → sceneStateChange
Box2Dを使った習作。


数値の入力は画面をドラッグ。