1

Flash CS4 から Flex Builder 3 にインポートしている SWC で何が起こっているのかを理解しようとしています。具体的には、カスタム プリローダー (サブクラス化された DownloadProgressBar) のアニメーションとしてデザイナーから提供された SWC を使用しています。

私が理解しようとしている問題は、FlexEvent.INIT_COMPLETE が起動されたら、これを実行して swc を削除してクリーンアップすることです。

removeChild(myPreloader);
myPreloader = null;

これを削除した後でも(呼び出しの前後に this.numChildren を比較して確認したので、これは成功しています)、キーフレームアニメーションは引き続き実行されます(目に見えない)。これは、デザイナーがアニメーション (Flash) のタイム ラインにトレースを配置することによって検出されました。

サブクラス化された DownloadProgressBar からアニメーションを削除した後でも、アニメーションが引き続き実行されるのはなぜですか?

また、SWC をインポートして Flash 側からリソースのクリーンアップを管理するのは標準的な方法ですか (obj-c でメモリを解放するのと同じように)。Flex 側から子を削除してもアニメーションが停止しないというのは直感に反すると思います。

これに対する手がかりは大歓迎です。

4

1 に答える 1

0

基本的に、SWC ファイルは、SWF を含む ZIP にすぎません。つまり、ステージから MovieClip を削除していますが、停止またはアンロードしていません。あなたは試してみたいかもしれません

myPreloader.stop();

アニメーションを停止し、

myPreloaderLoader.unload();

ステージからアイテムを削除してメモリを解放した後。

ただし、注意してください: Flash Player のガベージ コレクションは常に正しく機能するとは限りません。myPreloader 内で何らかの種類の ActionScript が実行されている場合、それは引き続き実行され、ガベージ コレクション中に無視される可能性があります。通常は、すべての AS クラスにclear()orメソッドを含めて、 で呼び出すのが最善です。これはデザイナーの同僚が行う必要がありますが、私の経験では、これが最もクリーンな手順です。destroy()Event.REMOVED_FROM_STAGE

于 2010-12-18T17:30:52.020 に答える