Labo
getDefinitionByNameでクラス名を文字列から作る
文字列からインスタンス名を作りたい時は「getChildByName」を使いますが、 クラス名を作る時は「getDefinitionByName」を使います。
サムネイル画像に使うような、比較的容量が小さめの画像を、最初からライブラリに登録しておいて、始めにロードしておきたいという場合など便利です。
例えば、ライブラリに読み込んだビットマップ画像のリンケージ名をPhoto1, Photo2...と連番で名前を付けた場合は下記のような書き方ができます。
//ドキュメントクラス
package {
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.utils.getDefinitionByName;
public class Main extends Sprite {
//コンストラクタ
function Main() {
init();
}
//実行関数
private function init():void {
//写真の数分ループ
for ( var i:uint = 0; i < 3; i++) {
var str:String = "Photo" + ( i + 1 );
//文字列からクラス名に成形
var ClassRef:Class = getDefinitionByName(str) as Class;
//ビットマップインスタンス生成
var bmd:BitmapData = new ClassRef(0,0);
var bmp:Bitmap = new Bitmap(bmd);
//各インスタンス座標
bmp.x = bmp.width * i;
bmp.y = (stage.stageHeight - bmp.height) / 2;
//ステージに配置
addChild(bmp);
}
}
}
}
"This is Demo Flash."
ちなみにこの3人は、左からホアン・アトキンス、デリック・メイ、ケビン・サンダーソンです。
09.07.17.AM02:18
http://plamo-tokyo.com/site/mt-tb.cgi/49
