[AS]Embedした複数の画像(クラス)を連番(文字列)で参照したい場合の方法
たとえば、aImage00.png,aImage01.png,aImage02.pngって画像をEmbedで埋め込んだ場合に、クラス名をfor文とかでまわすにはどうすればいいかということ。
二通りのやり方があるみたい。
まずは、ここの記事に教えていただきました。
[Embed]したものを動的に使いたいとき:TWO HEARTS
ポイントはstaticにして、配列アクセス演算子を使うということ。
直感的に納得できる感じ。
↓サンプルソース
package assetImage
{
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.Event;
import flash.utils.getDefinitionByName;
public class Main2 extends Sprite
{
[Embed(source = 'asset/aImage00.png')] private static var AImage0:Class;
[Embed(source = 'asset/aImage01.png')] private static var AImage1:Class;
[Embed(source = 'asset/aImage02.png')] private static var AImage2:Class;
public function Main2():void
{
for (var i:int = 0; i < 3; i++)
{
var bm:Bitmap = new Main2["AImage" + i];
addChild(bm).x = bm.width * i + 20 * i;
}
}
}
}
つづいて、getDefinitionByNameを使う方法
ここで教えていただきました。
■ 埋め込みアセットクラスをgetDefinitionByName()で参照する :棚からパルチャギ
こっちは埋め込むクラス名に対して、埋め込んだ場所のクラスをパッケージから書いたりとと直感的には全くわからない仕様。
(どうもmxmlのお作法もまざってるっぽい)
↓サンプルソース
package assetImage
{
import flash.display.Bitmap;
import flash.display.Sprite;
import flash.events.Event;
import flash.utils.getDefinitionByName;
public class Main extends Sprite
{
[Embed(source = 'asset/aImage00.png')] private var AImage0:Class;
[Embed(source = 'asset/aImage01.png')] private var AImage1:Class;
[Embed(source = 'asset/aImage02.png')] private var AImage2:Class;
public function Main():void
{
for (var i:int = 0; i < 3; i++)
{
var bm:Bitmap = new (getDefinitionByName("assetImage.Main_AImage"+i) as Class);
addChild(bm).x = bm.width * i + 20 * i;
}
}
}
}
とりあえずどっちでもよさげ。
Tweet
