0

私は 8 つのスプライトを含む SWC を持っています。各スプライトにはパターン Icon01、Icon02 などのリンケージ識別子があります。フォームの何かを実行することで、これらのスプライトの 1 つのインスタンスを作成できます。

var i:Icon01 = new Icon01();
this.addChild(i);

ただし、さまざまなメッセージを含む XML ファイルがあり、各メッセージには同じ方法でラベル付けされた画像要素が含まれています。

...
<message>
    <image>Icon01</image>
</message>
...

XML を解析して、対応するスプライトをステージにアタッチできるようにしたいと考えています。これはどのように行うことができますか?

私の XML データはオブジェクトの配列に解析され、XML 要素は

var msgObj:Object = this.theMessages.messages.shift();
trace(msgObj.image);

しかし、それをスプライトとしてキャストしてステージに追加する方法がわかりません。やってみた

var s:Sprite = msgObj.image as Sprite;
this.addChild(s);

そして、NULL オブジェクトに関するエラーが表示されます。助けてくれてありがとう。

4

3 に答える 3

1

getDefinitionByName(msgObj.image)行く方法ですが、どこかで呼び出している可能性のある各クラスを参照する必要があります。そうしないと、コンパイルされません。

この場合、呼び出されることのないダミー関数を作成し、そこにすべてのクラスをリストして、コンパイラに強制的に含めるようにします。

もう 1 つのオプションは[embed]、swc を使用する代わりに機能を使用してこれらをロードすることです。これにより、それらがコンパイルされ、いつでも呼び出すことができることが保証されます。

于 2011-03-24T04:05:19.077 に答える
1

FlashDevelop 4.0.1 (古いバージョンについては不明) では、.swf ファイルを右クリックします。「ライブラリに追加」オプションのすぐ下に「オプション」があります。「ライブラリ (参照されるクラスを含む)」の代わりに、「含まれるライブラリ (完全に含む)」を選択します。

最初のオプションでは、クラスのようにクラスを直接呼び出すと、new BackgroundImage();クラスが参照されるため、含まれているようです。それを使用してクラスを呼び出すと、var backgroundImage:Class = getDefinitionByName("BackgroundImage") as Class;直接参照されないため、含まれません。

2 番目のオプションを選択すると、.swc 内のすべてのクラスが含まれ、getDefinitionByName()動作します。

于 2012-03-15T05:44:16.393 に答える
1

flash.utils.getDefinitionByName()または loaderInfoを見てください。applicationDomain.getDefinition()、アセットが準備完了/ロード済みの場合。

例えば

import flash.utils.getDefinitionByName;

var Image:Class = getDefinitionByName(msgObj.image) as Class;
this.addChild(new Image());

HTH

于 2011-03-23T22:48:45.883 に答える