« loadBitmap | Home | 確定申告への道 »

Feb 212008

ストリングからクラスのインスタンスを作る

以前にBeInteractive!さんが書いていたAS2のストリングからクラスのインスタンスを作るはAS3ではどーなったのか?
ということで、書いておく。

これは前のエントリー。loadBitmapの延長線上にあります。
つまりライブラリにある画像をクラスに割り当て、BitmapDataとして取得する際に、画像のクラス名を変数として処理しないと正直使えないぜ!ということです。

わかりやすく言うと、ライブラリの中に"photo1","photo2","photo3"...と画像が存在して、それぞれにクラスが割り当てられていたとして、インスタンス初期化の際にすべてクラス名を定数で書いていたらif分の嵐。10個ぐらいなら耐えれるけど、100個とかあったり、可変したりしたらどーすんだ?と・・。
(まぁでも総数はどっちにしてもスクリプトに記述する必要はあるのだけど)

ということで調べてみました。
AS2のときはものすごい技が必要でしたが、AS3はその辺ツールが用意されていました。
getDefinitionByName ()

使い方は簡単。

import flash.utils.getDefinitionByName;
private function getImage(_id) {
var _className:Class = getDefinitionByName("photo"+_id) as Class;
var bmp:BitmapData = new _className(0, 0);
var _bm:Bitmap = new Bitmap(bmp);
this.addChild(_bm)
}
こんな感じ。 一応"getDefinitionByName"で戻ってくるのは"パラメータで指定したクラスのクラスオブジェクトへの参照"なので、"as Class"でクラスに定義してあげます。(多分これをやらないと、型指定無しで使えないと思う)

最初

var _className:Class = "photo"+id as Class;
とかやったんだけど、激しい勢いで怒られた。 asはそんなに万能ではないようです・・・。 うっとおしい。

PS
あ、コードはimport全部してないからbitmapとかは自分でimportしてください。

Leave a comment

Search and Archives