0

ライブラリを参照するAとの2 つのプロジェクトがあります。 とは(2 つの異なる AS3 プロジェクト) であり、はです。私のアプリケーションが実行されると、ロードされます。BMyExternalLibraryAB.swfMyExternalLibrary.swcAB

多用する 中には、、、ありClassます。サーバーに存在する をロードします (これらはユーザー要求ごとに動的にロードされるため、埋め込みません)。 MyLoaderMyExternalLibraryBMyExternalLibrary.MyLoader.swf

サーバーには と、ダウンロードするすべての が含まれていることに注意しAてくださいB.swf

ここで、サーバーにAいくつかの もロードする必要があり.swfます。したがって、inAも使用する必要があります。では、への参照を追加して、そのバイナリがコンパイル中に含まれるようにします。への参照を追加するだけで、実際にインスタンス化または変更することはありません。つまり、のコード (がロードされる前) のどこかに、次のものがあります。MyLoaderMyExternalLibraryAMyLoaderMyLoaderAB

MyLoader;

私は(明らかに)もインポートClassします。これにより、MyLoaderのバイナリが の に含まれることがA保証され.swfます。

を使用してbreakの機能を参照MyExternalLibary.MyLoaderするだけでは、読み込まれるすべての は、関連付けられたであり、すべての適切なフィールドを持っているにもかかわらず、関連する にはなりません。さらに、デバッガーでは、ロードされたs は、それらが正しい. たとえば、 をロードすると、;になります。さらに、デバッガーはそれがタイプであると述べていますが、私はそれをすることはできません。犯人は だと思います。ABMyLoader.swfBcastClassMovieClipMovieClipClass.swfMovieClipB.mySwfs.MyClasscastB.mySwfs.MyClassApplicationDomain

そのコード行をコメントアウトすると、すべてがB cast適切に行われることに注意してください。

何が起こっているのかについて何か知っている人がいれば、アドバイスをいただければ幸いです。この問題はownsApplicationDomain以降を扱っていると思います。inへのすべての参照をコメント アウトすると、が を所有するようになったため、 in のクラスにキャストできます。それが私の勘です!A MyExternalLibrary.MyLoadercastMovieClipAClassBMyExternalLibrary.MyLoaderAB MyExternalLibrary.MyLoaderB

ありがとう、

4

1 に答える 1

0

B解決策は、'sが'sとApplicationDomain同じであることを確認することでした。これは、またはのいずれかのインスタンスをパラメーター化することによって行われます。AApplicationDomainLoaderContextLoader.loadLoader.loadBytes

たとえば、次のコード行をAロードします。B

m_loader.load(new URLRequest("B.swf"), new LoaderContext(false, ApplicationDomain.currentDomain));

Bこれにより、のすべてのClass定義がに追加されAます。したがって、をAロードする.swfと、それMovieClipがinにcast編集されると、とが同じであるため、すべてが機能します。したがって、ロードされたによっては、にあるに編集できます。ClassBABApplicationDomainObjectAcastClassB

他の誰かがこの問題に遭遇した場合は、GreenSockのSWFLoaderを確認することを強くお勧めします:http ://www.greensock.com/as/docs/tween/com/greensock/loading/SWFLoader.html

于 2012-07-24T18:08:07.650 に答える