1

getDefinitionByName に少し問題があります。私の目的は、実行時にドキュメント mxml で FXG オブジェクト (Number10.fxg) をインスタンス化することです。クラスの名前は、インスタンス化するクラスの名前を返すために getDefinitionByName によって使用される文字列変数にあります。エラー メッセージを送信しなくても、コードは機能しません。コードは次のとおりです。

import assets.Number10;
import flash.utils.getDefinitionByName;
import mx.core.IVisualElement;

private function onClick(event:MouseEvent):void
{ 
  var value:String = "Number10";
  var ClassDefinition:Class = getDefinitionByName(value) as Class;
  var ten:IVisualElement = new ClassDefinition() as IVisualElement;
  this.contentGroup.addElement(ten);
}

私も試してみました... var ten:IVisualElement = new ClassDefinition(); しかし、何もありません。うまくいきません!私を助けてください!


まず第一に、電信トピックを扱っているアドビのドキュメントページを参照します。ここにあります:

オプションにはクラスが含まれます [...]

説明コンパイル時に必要かどうかに関係なく、1 つまたは複数のクラスを結果のアプリケーション SWF ファイルにリンクします。個々のクラスではなく SWC ファイル全体をリンクするには、include-libraries オプションを使用します。

OK.Flash Builderでは、このオプションだけがある追加のコンパイラ引数に移動します

-locale en_US

だから私はこの下に私のオプションを追加します

-includes class = assets.Number10

また

-includes class assets.Number10

また

-includes class Number10

アプリケーションを実行すると、エラー #2032 が表示されます。

オプション宣言が間違っていると思います。オプションを使用するための良いリファレンスがありません。だから…助けて!

includes class オプションを使用して、他の fxg オブジェクトで Number10 クラスまたはアセット パッケージを宣言するにはどうすればよいですか?

4

3 に答える 3

1

Ok!解決策を見つけました...コードのどこかにNumber10クラスへの参照を配置することです。たとえば、次のようになります。

import assets.Number10;
import flash.utils.getDefinitionByName;
import spark.core.SpriteVisualElement;

//case1
var myNumber:Number10;

//or

//case2
Number10;

private function onClick(event:MouseEvent):void
{ 
  var value:String = "assets.Number10";
  var ClassDefinition:Class = getDefinitionByName(value) as Class;
  var ten:SpriteVisualElement = new ClassDefinition() as SpriteVisualElement;
  this.contentGroup.addElement(ten);
}

そしてコードは機能します:-)

これは、Flexがコードをコンパイルする方法に起因する問題です。Flexはコードをコンパイルするため、クラスが使用されていない場合、このクラスは最終的にコンパイルされたプログラムから除外されます。しかし、問題はまだ終わっていません!インスタンス化できるFxgオブジェクトが何百もある場合、すべてのクラスを宣言するのは少し難しくて面倒です。では、パッケージのすべてのクラスを一度に宣言するにはどうすればよいですか?

于 2012-06-22T11:55:58.923 に答える
1

include および includeClasses コンパイラ オプションを使用して、クラスを SWC および SWF に追加できます。これらを使用すると、コード内でクラスを参照する必要がなくなります。適切な使用方法については、ドキュメントを参照してください。

于 2012-06-22T12:04:08.747 に答える
0

必ず完全修飾クラス名を使用してください。

また、FXG クラスを IVisualElement としてキャストするアプローチは、私にとって初めてのことです。キャストや並べ替えには実際のクラスを使用する必要があると思いました。SpriteVisualElement を使用してみてください。

private function onClick(event:MouseEvent):void
{ 
  var value:String = "assets.Number10";
  var ClassDefinition:Class = getDefinitionByName(value) as Class;
  var ten:IVisualElement = new ClassDefinition() as SpriteVisualElement.;
  this.contentGroup.addElement(ten);
}
于 2012-06-22T01:36:31.777 に答える