[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