棚からパルチャギ

日々の雑記、ニュース拾いとか

2007. 09. 25

AS3のリフレクション
AS3で動的にクラスやメソッド名などを取得する方法とか。

クラス名だけならgetQualifiedClassName()で取得できるので簡単なんですが、 メソッドやプロパティを取得するにはdescribeType()で返ってきたXMLオブジェクトから取り出さないといけないので、少し面倒ぽい?
XMLにはE4Xでアクセスできるので参照するだけなら1行で済みそうですけど、あんまり勉強していないのでなんとも。

関連:flash.utils.describeType

2007. 09. 10

埋め込みアセットクラスをgetDefinitionByName()で参照する
ぐぐるさん頼りでActionScript3についていろいろ調べたネタでも投下していこうかと。

AS3で画像やサウンド(mp3)なんかをEmbedを使ってswfファイルに埋め込む場合、数が多くなると大量の宣言が並んで大変なことになります。 Embedは仕方が無いとして、ロードの部分はなんとか効率良くできないものかなーと思うわけで。

[Embed(source='image0.gif')] private var Image0:Class;
[Embed(source='image1.gif')] private var Image1:Class;
[Embed(source='image2.gif')] private var Image2:Class;
...

var img: Array = new Array();
img[0] = new Image0();
img[1] = new Image1();
img[2] = new Image2();    // ←列挙するのは、なんか美しくない

Embed Generatorなんてツールまであるくらいだから、 これ以外に手法はないのかと思っていたんですが、getDefinitionByName()というメソッドが使えるようです。

import flash.utils.getDefinitionByName;

for (var i:int=0; i<3; ++i) {
    img[0] = new (getDefinitionByName("Sample01_Image"+ i) as Class);
}

こんな感じ。 「Sample01」はアセットを埋め込んだクラス名。
埋め込みアセットクラスの場合は、単純に getDefinitionByName("Image0") のようには参照することができず、 親(?)のクラス名をアンダーバーで繋がないといけないとのこと。 とにもかくにも、これでスッキリしました。
ネタ元:ActionScript 誰かが物凄い勢いで解答するスレ 17

  [ 1 ]