2009-07-09 47 views

答えて

10

確かに...タイマーとイベントを登録解除し、親から削除して、すべての参照を削除してください。 ;)

つまり、AS3はガベージコレクトされた言語なので、オブジェクト(MCを含む)がで実際にがメモリから削除されたときは制御できません。イベント登録を含むすべての参照を削除すると、GCは不要になったことを検出して自分のためにクリーンアップします。

イベントに登録するときはいつでも、useWeakReferenceパラメータをtrueに設定することができます。それは次のとおりです。

myMC.addEventListener(Event.ENTER_FRAME, onFrame, false, 0, true); 

これは、この特定のイベントリスナを基準としてカウントしないことをAS3を告げる - ので、あなたがMCへの他のすべての参照を削除した場合、それはゴミがリスナーの登録を解除しない場合でも収集してしまいます。 (タイマーに関しては、setTimeoutやsetIntervalを使っているのであれば、どちらも参照とはみなされませんが、それについてはわかりません)

MCを傷つけず、Flashにすべてのものを掃除させる方法はありません。これはAS3の仕組みです。参照やイベントの管理は、厳格なコーディングの一部です。あなたのMCにタイマーやイベントがなく、親から削除され、コードのどの部分でも参照されていない場合は、それがなくなります。

2

Loader.unloadAndStop()http://www.gskinner.com/blog/archives/2008/07/additional_info.htmlから引用

:ここ

がunloadAndStopは、コレクションのためにロードされたSWFを準備しないことのリストです:

  • は、すべてのムービークリップ
  • 停止を停止しますすべてのサウンド再生/ストリーミング
  • すべてのタイマーオブジェクトを停止/削除
  • 、frameconstructed、のenterFrame、exitFrameのためにすべてのグローバルリスナーを削除し活性化させる、子によって作成されたすべてのステージリスナーを削除
  • を無効にします。
  • は、すべてのNetConnection /のNetStream
  • Video.attachNetStream /はattachCamera(0)
  • Microphone.setLoopback(0)
  • グローバルフォントテーブルからAS3フォント
  • 停止ソケット、xmlsockets、のFileReferenceダウンロードを削除閉じ他のダウンロードオブジェクト等(孫SWF)、
  • 解放等cacheAsBitmapプロパティ/フィルタに関連するビットマップ、

なお、ABの全てoveは再帰的に実行されるため、他のロードされたSWFも含めて、ネストされた子にも適用されます。

+1

これは、読み込まれたSWFファイルであり、MovieClipsでは使用できません。 – Cay

1

私はいくつかのイベント、特にタイマーイベントは、useWeakReferenceがtrueに設定されているときに起動に失敗見てきました。したがって、fenomasの提案に注意してください。私は通常、MovieClipにdealloc関数を作成し、addEventListener(Event.REMOVED_FROM_STAGE, dealloc); MovieClipのremoveChild()を呼び出すと、dealloc関数が起動します。

特に、私たちが望むよりも頻繁に矛盾が発生する場合は、このことを自分でFlashで処理することをお勧めします。

1

Jeremy、イベントが解雇されないようにするには、アイテムに参照がどこかにあることを確認してください。

E.G.プリローダへの外部参照、および任意_rootClip.loaderInfo.addEventListener(によってProgressEvent.PROGRESS、FNがないこの時点で

new PreLoader(root); 

:私はコマンドでフレーム1にルートタイムラインから呼び出されPreloaderクラスを作っ)は失敗する。 (_rootClipは私のPreLoaderクラスのプロパティで、ルートはパラメータとして渡されます)。

私がしたことは単純です: ローディングバー用のムービークリップを作成し、このムービークリップをルートに追加するので、このムービークリップには参照があります。 私はプレローダーを参照し、自分のイベントが削除されないようにmyMC.preloader = this;しています。 プリロードを完了すると、ただちに_rootClip.removeChild(myMC);がすべてを削除します:)

関連する問題