5

多くのアセットが埋め込まれたクラスがあります。

クラス内で、アセットのクラス定義を名前で取得したいと思います。getDefinitionByName()とApplicationDomain.currentDomain.getDefinition()を使用してみましたが、どちらも機能しません。

例:

public class MyClass
{
  [Embed(source="images/image1.png")] private static var Image1Class:Class;
  [Embed(source="images/image2.png")] private static var Image2Class:Class;
  [Embed(source="images/image3.png")] private static var Image3Class:Class;

  private var _image:Bitmap;

  public function MyClass(name:String)
  {
    var ClassDef:Class = getDefinitionByName(name) as Class;  //<<-- Fails
    _image = new ClassDef() as Bitmap;    
  }
}

var cls:MyClass = new MyClass("Image1Class");
4

4 に答える 4

8

これはあなたの質問には答えませんが、問題を解決するかもしれません。私はこのようなことをするとうまくいくと信じています:

public class MyClass
{
  [Embed(source="images/image1.png")] private static var Image1Class:Class;
  [Embed(source="images/image2.png")] private static var Image2Class:Class;
  [Embed(source="images/image3.png")] private static var Image3Class:Class;

  private var _image:Bitmap;

  public function MyClass(name:String)
  {
    _image = new this[name]() as Bitmap;    
  }
}

var cls:MyClass = new MyClass("Image1Class");

ブラケット記法が封印されたクラスで機能するかどうかを思い出すのに苦労しています。そうでない場合、簡単な解決策は、クラスを動的としてマークすることです。

于 2008-09-17T20:57:33.703 に答える
3

メソッドが機能しない理由は、「Image1Class」が実際のクラス名ではなく変数名であるためです。

このようなクラス名を取得できます

import flash.utils.getQualifiedClassName;
trace(getQualifiedClassName(Image1Class));

ご覧のとおり、これはクラス名(関数に渡される必要がある名前)がのようなものであることを意味しますMyClass_Image1Class

于 2011-04-28T13:06:31.640 に答える
2

派手な getDefinitionByName() メソッドを使用する必要はありません。動的に参照するだけです。あなたの場合、「失敗」行を次のように置き換えます。

var classDef:Class = MyClass[name] as Class;

そして、それはそれを行う必要があります。

于 2008-09-17T21:01:37.047 に答える