3

再利用されたローダー オブジェクトに swfs をロードする際に問題が発生したので、この件について明確にする必要があります。

3 つの SWF があるとします。
Main.swf
childA.swf
childB.swf

Main.swf には、再利用されるローダー オブジェクト (myloader.load("childA.swf")) があり、childA または childB の swf はユーザーの操作によって読み込まれます。
両方の子 swfs には、config という名前のパッケージ内のクラスを含む com パッケージがあります。
構成ファイルは、同じ名前の両方のクラスの異なるファイルです。
両方の子 swf も、メインがリッスンするイベントをディスパッチします

今私が抱えていた問題は、childAが最初にロードされた場合、childBがロードされた後もchildAとして表示されることでした。基本的に、そのローダーに最初にロードされた方が勝者になります。
何をしてもswfがアンロードされないので、これは私を夢中にさせました。次のコードが見つかるまで。

var appDomain:ApplicationDomain = new ApplicationDomain();
var context:LoaderContext = new LoaderContext(false, appDomain);
_contentPanel.load(new URLRequest(str), context);

swfを本当にアンロードする方法について話しているどこかの投稿で、このコードに出くわしました。どうやら、これはswfを実際にロードする方法にも当てはまります。
ご覧のとおり、新しい appDomain が作成され、ロード時にコンテキストに割り当てられます。
これは夢のように機能し、一日中積み降ろしができるようになりました。

私の混乱は、同じappDomainにないためにメインswfがそれを拾うべきではないと思うときに、子がディスパッチするイベントがまだ機能していることです。
イベントをブロックすべきではないということですか?

4

1 に答える 1

2

SWF のアンロード

Loader クラスが提供するLoader.unload()(または Flash Player バージョン 10 以降Loader.unloadAndStop())

2 番目に読み込まれた SWF が最初の SWF によって上書きされる問題

s に格納されているオブジェクトはApplicationDomainクラス名で格納されており、ロードされた SWF (またはその子) のクラス名がオーバーライドされているかどうか疑問に思います。そうでなくても。ロードされるオブジェクトごとにローダーの新しいインスタンスを使用しないのはなぜですか?

メイン SWF が別のアプリケーション ドメインから両方の子を取得する方法

メイン SWF は、メイン SWF の子ドメインであるため、新しい (ロードされた) アプリケーション ドメインで動作できます (ApplicationDomain.parentDomain を参照)。メイン SWF のドメインは「システム ドメイン」になり、新しいインスタンスはその下にロードされます。

ロードされた SWF をローダーから分割する

の状態に関係なく、SWF データにアクセスできることが理想的ですLoader。これを行うには、ロードされた SWF のルート movieClip にアクセスし、新しいインスタンスを作成します。

var rootClipClass:Class = ApplicationDomain.getDefinition("[InsertYourRootClipName]") as Class; 
var rootClip:MovieClip = new rootClipClass(); 

その時点で、ローダーをアンロードして、新しいインスタンスをクリーンに操作できます。

参考文献

于 2012-12-06T21:10:04.943 に答える