Flash Builder 4.6 で作成した 2 つのプロジェクトがあります。
- ActionScript プロジェクト
- モバイル フレックス プロジェクト
これらのプロジェクトは両方とも、ムービー クリップ アセットを含む同じ外部 SWF ファイル (Flash Professional CS6 で作成) をロードします (外部 SWF ファイルをロードするために同じ共有コードを使用します)。
どちらのプロジェクトも、swf アセット ファイル内のムービー クリップを拡張します。たとえば、swf ファイルには、1 つのテキスト フィールドを含む「Test」というムービー クリップがあります。リンケージ クラスは「MyTest」で、テキスト フィールドのインスタンス名は「txt1」です。
パブリックの「txt1」プロパティとプライベートの「var counter:int」を含む両方のプロジェクトに「MyTest」というクラスがあり、swf がロードされたら、次のコードを使用してクラスのインスタンスを作成します。
var x:MyTest = new MyTest();
actionscript プロジェクトではうまく機能し、x が正しく作成され、テキストフィールド txt1 が正しく設定されています。
ただし、flex プロジェクトでは txt1 プロパティが null であるため、インスタンスは外部 swf からの「Test」ムービー クリップのインスタンスではありません。
私は何を間違っていますか?モバイルフレックスプロジェクトではなく、アクションスクリプトプロジェクトで機能するのはなぜですか? これは、このすべての作業を行う共有コードであり、flex プロジェクトのためだけに新しいコードを書き直すのは嫌です...
ありがとう。
物事をより明確にするために
このコード片:
var cls:Class = loader.contentLoaderInfo.applicationDomain.getDefinition("MyTest") as Class;
var x:Object = new cls();
trace(getQualifiedClassName(x));
var y:MyTest = x as MyTest;
x は、swf で定義されているように MyTest 型に設定され (「カウンター」プロパティを持たない)、y は null になります (セーフ ケースは成功しませんでした)。