文字列でクラス指定してインスタンスを生成できるって知ってましたか?

getDefinitionByNameというパブリックメソッドがあるんですね。このメソッドはパラメタで与えた文字列で指定したクラスのクラスオブジェクトへの参照を返してくれます。コードを書いてみると・・・・

//クラスオブジェクトの参照を取得 var ClassReference:Class = getDefinitionByName("flash.display.Sprite") as Class; //クラスオブジェクトを用いてインスタンスを生成 var instance:Sprite = new ClassReference() as Sprite;

こんなことができるんですねー!一つ便利につかえそうなケースを考えてみました。 例えばボタンのクリック音とかって実際にボタン押して試してみたい!で候補が結構ある。そんなことありませんか?AS3ではリンケージ設定したサウンドはユニークな名前のクラスとして、生成します。ここで文字列指定でのインスタンス生成が使えそうです。

var soundList:Array = [];//サウンドインスタンスを入れとく配列 //Sound0~Sound9までのサウンドクラスのインスタンスを生成します for(var i:int = 0; i < 10; i++){ var ClassReference:Class = getDefinitionByName("Sound"+i) as Class; var sound:Sound = new ClassReference() as Sound; soundList.push(sound); } //クリックすると順番に音が再生 function onMouseClickHandler(e:MouseEvent):void{ var sound:Sound = soundList.unshift(); sound.play(); soundList.push(sound); } btn.addEventListener(MouseEvent.CLICK, onMouseClickHandler);

リンケージを連番に設定しておけば、サウンドテストが簡単にできるようになりそうです。リンケージ設定もJSFLとかでやっちゃえば、もううはうはですね!

HTML5飯