• home>
  • ブログ>
  • getDefinitionByNameの陥りやすいところ

blogブログ

getDefinitionByNameの陥りやすいところ

AS3で文字列で指定したクラス名から参照を得たいときに、getDefinitionByNameを使います。
類似のクラスを条件によって複数呼び出すときなど便利なのですが、ちょっとした落とし穴が。
ASファイルなどのみでつくられたクラスを呼び出すとき、たとえば、

var ClassReference:Class;
var path = "jp.bondesign."+_type;
ClassReference = getDefinitionByName(path) as Class;
var obj:*; = new ClassReference();

とやっても、「〜は定義されていません。」とエラーがでてしまいます。
こんなときは、もし呼び出すクラス名(2行目の「_type」のところ)が「Thumbnail1」「Thumbnail2」とかだったら、前に

var _thumbnail1:Thumbnail1;
var _thumbnail2:Thumbnail2;

と呼び出してあげればOKです。
あと、これらのクラスはimportもしておいてあげなければいけません。

import jp.bondesign.*;

とまとめてしておけばいいでしょう。

ムービークリップにリンケージされたクラスを呼び出すときなどは問題ないので、この場合はおそらくプロパティの「最初のフレームに書き出し」などで事前に呼び出されているのではないかと思われます。

しかし、2つくらいならいいけど、大量のクラスを使い分けたいときとかは、不便ですね。
なにか解決方法はないものかと思いますが、まあ、実際に使うのケースは2、3つくらいのものなのかもしれません。