画像をタイムラインに置いた場合のBitmapDataへのアクセス


FlashIDE上で画像を配置して、後でそのビットマップデータへアクセスしようと思ってもうまくいかない。

例えば、ステージに画像を直接貼り付けただけのflaファイルがあったとして、1フレーム目のスクリプトに

trace(this.getChildAt(0));

と書くと、

[object Shape]

となって、BitmapやBitmapDataにはアクセスできないみたい。

これをどうにかできないかと思っていろいろ情報を探してみたら、ライブラリでその画像データを『ASに書き出し』にすると、その他何も変更しなくても

[object Bitmap]

となって、画像へアクセスできるようになる様子。

つまりは画像をタイムラインに配置しているだけだと、その画像は内部的には自動でFlashIDE上で「分解」をしてShapeになった状態として認識されてるということかな?

アクセスはし辛い代わりに後でdispose()する必要もなくなるわけで、必要によりけりですが、どうしてもタイムラインに配置した画像を制御したいという時には役に立つかもしれません。

ただ、この間これをやろうとしたら、対象となるMCを作り直すときに毎回画像データとしてnewすることになるのか、ASに書き出したほうが動作が遅くなった気がします。

スクリプトで画像をnewして表示する場合も多々あると思いますが、意外とBitmapを作るよりもshapeにbeginBitmapFillした方が速かったりして。この辺は時間があるときに確認してみたいです。

緑色になる謎


Flashを使ってて、ライブラリに入ってるムービークリップが、クラスを割り当てた時に緑色のアイコンになるときがあって、ずっと何故なんだろうと思ってたんですが、最近ようやく分かりました。

原因:割り当てたクラスがSpriteである

要するにMovieClipだと紫色で、Spriteだと緑色らしい。

うーん、FlashのIDE上でSpriteかMovieClipかを意識する必要はあんまり無い気がするんだけどどうなんだろう。まああるに越したことは無いのでいいっちゃいいんですが。CS3にはこの機能は無く、CS4からみたいです。ちなみにflash.display.Spriteでなくとも、これをextendsした独自クラスでもSpriteとして判定されて緑色に変化するみたいです。そんなところまで見てたのか、とちょっと感心しました。