Flex/AS3 で、getDefinitionByName を使用して埋め込みアセットのクラス定義を取得するにはどうすればよいですか

StackOverflow https://stackoverflow.com/questions/87557

質問

多くの埋め込みアセットを含むクラスがあります。

クラス内で、アセットのクラス定義を名前で取得したいと考えています。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");
役に立ちましたか?

解決

これは質問の答えにはなりませんが、問題が解決する可能性があります。次のようなことを行うとうまくいくはずだと思います:

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");

括弧表記がシールされたクラスで機能するかどうかを思い出すのに苦労しています。そうでない場合、簡単な解決策は、クラスを動的としてマークすることです。

他のヒント

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

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

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

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

複雑な getDefinitionByName() メソッドを使用する必要はなく、動的に参照するだけです。あなたの場合、「Fails」行を次のように置き換えます。

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

それで済むはずです。

どうもありがとうございます!POS getDefinitionByName を getQualifiedClassName と連携させるのに 5 時間近く費やし、準備が整いました。最終的に動作するコードは次のようになり、配列から文字列名も取得します。

CreatureParam は文字列の 2 次元配列です。

Type は HTML タグによってフラッシュに送信される整数で、PHP 経由で MYSQL データベースから取得されます。

Mark1_cb はステージ上にあるインスタンス名を持つコンボボックスです。出力も整数です。

したがって、このコードの直下では、外部 SWF「ArtLibrary.swf」からクラス「BirdBodyColor_mc」をインポートしています。BirdBodyColor_mc は、PNG イメージから作成されたムービークリップです。ArtLibrary.fla 内のムービークリップをダブルクリックし、2 番目のキー フレームを挿入する必要があることに注意してください。ムービークリップには明らかに 2 つのフレームが必要です。そうでないと、フラッシュがスプライトとしてインポートしようとし、タイプの不一致が発生します。

embed(source = "artlibrary.swf"、symbol = "birdbodycolor_mc")] var birdbodycolor_mc:class;

通常は、このコードを使用して、このムービークリップ クラスのインスタンスをステージに配置します。

myMC:MovieClip = 新しい BirdBodyColor_mc();addChild(myMC);

var 定義:クラス = this["BirdBodyColor_mc"] をクラスとして;var Mark1:MovieClip = 新しい定義();

ただし、配列内で検索した文字列値を使用してこれを行う必要があります。ここにそのコードがあります。

var Definition:Class = this[CreatureParam[Type][Mark1_cb + 2]] をクラスとして。var Mark1:MovieClip = 新しい定義();

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top