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

Voice

Leave a Reply
name:
e-mail:
url:
voice:

Track Back

http://plamo-tokyo.com/site/mt-tb.cgi/49