3

アート アセットを取得しようとして、flash.utils.getDefinitionByNameを使用しています。私はこの機能をかなり使用していますが、今まで問題はありませんでした。それを確認してください:

assetName = Assets.MegaBerry; // works
assetName = getDefinitionByName("Assets.MegaBerry") as Class; // doesn't work

一体何?? 2 行目のエラー応答は「Variable not found.」です。

重要な場合: Assets はルート ソース ディレクトリにあるファイルです (パッケージはありません。Assets は完全修飾名です)。

import Assets;

運が悪いとトップに。

参考までに、Assets.as には次のようなものがあります。

    [Embed(source = "../art/Inventory/MegaBerry.png")]
    public static var MegaBerry:Class;
4

5 に答える 5

3

あなたの問題は、リソースをクラスに埋め込むと、そのクラスに属するAssetsタイプの静的変数が作成されることです。これは、使用時に参照しているものです。 ClassAssets.MegaBerry

ただし、MegaBerry クラスを完全修飾クラスに登録するわけではありません。これを行うにはregisterClassAlias、アプリケーションのどこかで次を使用する必要があります。

registerClassAlias("Assets.MegaBerry", Assets.MegaBerry);

その後、 を呼び出すと、他の場所でも使用できるようになりますgetDefinitionByName

**編集**

それは予期しない動作です...実際には、埋め込まれたクラスは自動的に登録されて{className}_{variableName}いますが、期待する表記ではなく、の下に登録されています。だから使用:

getDefinitionByName("Assets_MegaBerry") as Class;

トリックにすべきです。

registerClassAliasgetClassByAliasも機能しますが、代わりにを呼び出す必要がありますgetDefinitionByName。取り乱してすみません。

**編集終了**

Embed タグを使用して別のクラス ファイルにリソースを挿入することもできます。このファイルは、 をgetDefinitionByName使用するか、単にインポートを使用して、期待どおりに参照できます。

package assets {

    [Embed(source="../art/Inventory/MegaBerry.png"]
    public class MegaBerry extends BitmapData {
    }
}
于 2012-04-29T17:39:00.743 に答える
1

呼び出す代わりに

assetName = getDefinitionByName("Assets.MegaBerry") as Class;

、代わりに次を使用します。

assetName = Assets["MegaBerry"];
于 2012-04-29T18:40:28.583 に答える
0

クラスの完全修飾名が実際に何であるかを知りたい場合は、次のようにすることができます。

trace(getQualifiedClassName(Assets.MegaBerry));

たとえば、Assets.as内からこれを行うことができます。

その文字列をにフィードバックしgetDefinitionByName()て、クラスへの参照を取得できます。

trace(getDefinitionByName(getQualifiedClassName(SomeClass)));
// output [class SomeClass]

またgetDefinitionByName()、getDefinitionByName呼び出し自体と同じスコープ内にあるクラスの参照のみを取得することを忘れないでください。したがって、外部SWFをロードする場合、クラス参照の取得は、使用しているアプリケーションドメインと、このコードが実行される場所によって異なります。

于 2012-04-30T16:11:11.023 に答える
0

試す:

 [Embed(source = "../art/Inventory/MegaBerry.png" , symbol="MegaBerry")]
 public static var MegaBerry:Class;
于 2012-04-29T17:17:51.053 に答える
0

actionscript では、オブジェクトは実際には、コードで示される実際の変数名とは異なる name プロパティを持っています。

たとえば、次のように変数を作成すると、

var myBerry = new MegaBerry();

その後、getDefinitionByName("myBerry")null を返します。

と書いて変数の名前を設定した場合にのみ、あなたが望むものを返しますmyBerry.name = "myBerry"getDefinitionByName("myBerry")オブジェクトの名前は、必ずしもコード内の変数名と同じである必要はありません。

あなたの特定のケースでは、とにかくそれを使用する必要はないと思います。試しましたassetName = new MegaBerry()か?

于 2012-04-29T19:22:11.807 に答える