CastPreloaderのイベント処理
- 2010 年 3月 10 日
Progression 4.0.1 Public Bate 1.3 を使っていて気づいたこと。CastPreloaderではProgressionインスタンスが生成されていないので、CastPreloader内でCastSpriteなど、Progressionの表示オブジェクトをAddChildコマンドで加えても、CastSpriteのatCastAddedなどイベント処理の実行がされないようだ。
たとえば以下のように、CastPreloaderのatCastLoadStart処理中にCastSpriteを加え,そのcastAddedイベント中にTraceコマンドで出力を試みても「 sample onCastAdded 」のtraceは出力されない。
override protected function atCastLoadStart():void{ var sample:CastSprite = new CastSprite(); sample.onCastAdded = function():void{ addCommand( new Trace( "sample onCastAdded" ) ) } addCommand( new AddChild( this.foreground, sample ) ); } |
castAddedイベントが正しく処理されるようにするには、PreloaderでもProgressionのインスタンスを生成しておくと期待通りになる。
override protected function atCastLoadStart():void{ Progression.initialize( new WebConfig() ); var manager:Progression = new Progression( "preloader", this.stage ); var sample:CastSprite = new CastSprite(); sample.onCastAdded = function():void{ addCommand( new Trace( "sample onCastAdded" ) ) } addCommand( new AddChild( this.foreground, sample ) ); } |
ここでは、atCastLoadStart内でProgressionクラスの初期化とインスタンスを作っているけど、コンストラクタで作った方が自然かな。
ちなみに、PreloaderにProgressionクラスを加えると10K以上ファイルサイズが増えます。不要ならProgressionインスタンスをPreloaderで使う必要はないでしょう。
Preloaderの性質を考えるとそのファイルサイズは小さいほどよいと思いますので、CastPreloaderがデフォルトでProgressionインスタンスを生成しないのは僕は望ましいと思います。おそらくそのあたりがこの仕様の理由なんじゃないかと思ってみたり、みなかったり。