3

.SWC ライブラリ (.FLA ドキュメントからエクスポート) を使用して、ゲームのグラフィック データを保存しようとしています。私のクラスの 1 つで、要求されたレベルの MovieClip のインスタンスをアタッチしようとしていますが、getDefinitionByName() を使用しようとしているので、レベル番号に基づいて正しいクラスを取得できます。私は Flash Builder 4.7 で作業しています。問題の SWC は、理論上は「コードにマージ」に設定されたビルド パス ライブラリとして取り込まれ、実際にはどこからでもそのクラスにアクセスできるようになっています。

ただし、評価対象のクラスが存在し、自由にアクセスできることを確認できても、 getDefinitionByName() は機能しません。

以下は、クラスコンストラクターで扱っているものの一種です。

1:

public function MyClass() {
    var lev:MovieClip = new Level1();
}

2:

public function MyClass(id:uint) { // For this example, id == 1
    var lClass:Class = getDefinitionByName("Level"+id) as Class;
    var lev:MovieClip = new lClass();
}

理論的には、#1 と #2 はまったく同じ結果を生成するはずです。つまり、「lev」は Level1() クラスの新しいインスタンスですよね? しかし、#1は機能し、#2はスローしますReferenceError: Error #1065: Variable Level1 is not defined.

さらに不可解なことに、このまったく同じクラスのメソッドでもほぼ同じことが機能します。唯一の違いは、そのメソッドが別のクラスの静的メソッドを呼び出し、それが次に getDefinitionByName() を呼び出すことです。静的メソッドが違いを生んでいますか?もしそうなら、それはなぜですか?

4

1 に答える 1

6

を使用したことはありませんgetDefinitionByName()が、LiveDocsをざっと見ると、完全なパッケージパスを提供する必要があるように見えます。

var lClass:Class = getDefinitionByName("Level"+id) as Class;

する必要があります

var lClass:Class = getDefinitionByName("com.your.package.here.Level"+id) as Class;

見るgetDefinitionByName()

于 2013-01-30T18:06:24.257 に答える