FLiNTのSharedImage
- 2008 年 4月 14 日
FLiNTのSharedImageについて。 SharedImageは、DisplayObjectEmitterには使えないものと思っていました。 実際には全然勘違いでしてDisplayObjectEmitterにも利用できたので、自分への備忘録もかねてエントリーします。 DisplayObjectにSharedImageをイニシャライズすると、パーティクルのimageに格納(addChildされる)されます。 たとえば以下のようにリンゴのインスタンスを作り、 SharedImageに使うとりんごが一つだけ表示されます。
var emitter = new DisplayObjectEmitter(); var apple:Apple = new Apple(); emitter.addInitializer( new SharedImage(apple) ); emitter.setCounter( new Blast(5) ); emitter.start(); |
サンプル1
new Blast(5)としているので、5つリンゴが表示されて欲しいところですが、一つだけ表示されます。BitmapEmitterだとリンゴは5つ表示されるので、以前はこの辺で短絡的にBitmapEmitterにしか使えないと思ってしまいました。 これは5つのパーティクルのimageに次から次へのリンゴが移動して、最後のパーティクルのimageに格納されている模様です。 そこで扇を作った時は以下のようにしました。
var emitter = new DisplayObjectEmitter(); emitter.setCounter( new Blast(1) ); for(var i=0; i<5; i++){ var apple:Apple = new Apple(); emitter.addInitializer( new SharedImage(apple) ); emitter.start(); } |
サンプル2
これだとリンゴは5つ表示されます。 各パーティクルのimageには、リンゴがビットマップにならず入っていますので、外からimageに対し処理が可能です。emitterのparticles配列には、最初に定義したものが配列の最後に入ります。 emitterのparticlesは読み込み専用であらかじめ設定できないようですし、emitter.start()としないとパーティクルが作れないようです。 パーティクルを自由に設定するにはやりにくいかな。 他にも引っかかったところは多々ありましたので、この辺はやはりFLiNTがパーティクルでパーティクルらしいものを表示するのに設計されている所為かと思います。 FLiNT自体を修正してしまうなら別にしても、そのまま使うなら仕様にあわせた工夫が必要そうですね。