2008年03月05日
Flash | ライブラリのアセットはリフレクションで
今取り組んでいる案件は訳あってFlash CS3でコンパイルしなければならないが、コンテンツはほぼActionScriptオンリーで作成している。ソースはFlex Builder 3のActionScriptプロジェクトとして書いているのだが、Flash CS3でコンパイルするため[Embed]メタタグで画像等の素材を埋め込むことができない。そのため、Flashのライブラリに画像を登録し、リンケージで書き出している。
例えばIconクラスとしてリンケージ書き出したビットマップのシンボルは、ActionScriptの中で扱うときに
var iconData:BitmapData = new Icon(0, 0); var icon:Bitmap = new Bitmap(iconData); addChild(icon);といった感じとなる。
しかし、Flex BuilderからFlashのライブラリは参照できないので、Iconクラスの参照が常にエラーとして表示されてしまう。Flashのライブラリをクラスパスに加える方法はないものなのか。
で、このエラー表示は鬱陶しいなあと思っていた今日この頃だったのだけど、さっきリフレクションでオブジェクトを生成すればいいんじゃんということに気付いた。
var IconClz:Class = getDefinitionByName('Icon') as Class;
var iconData:BitmapData = new IconClz(0, 0) as BitmapData;
var icon:Bitmap = new Bitmap(iconData);
addChild(icon);これでFlex Builderからエラーの表示が消えた。スッキリした。他のエラーにも気付きやすくなったし。
リフレクションでのオブジェクト生成がパフォーマンスにどれ位影響を与えるのか、後で調べてみる。
追記
簡単なパフォーマンステストをしてみた。リフレクションの方が遅いと予想してたけど、僕の環境ではリフレクションで生成しようが、クラスを直接参照して生成しようが実行速度は変わらなかった。
Comment