2012-05-03 15 views
0

私は最初の数フレームのタイムライン上のボタンを持っているが、その後、私はそれを削除した場合... タイムライン、イベントリスナー、クリーンアップ

は私がボタンのイベントリスナーを削除する心配する必要はありません(ムービークリップ)ボタンがステージから取り外されていれば?

タイムライン上のオブジェクトを使用していても、ドキュメントクラスを作成しています。

+3

あなたはそれがガベージコレクションであることを確認したい場合は、イベントリスナーを削除します。 –

+0

私のキーフレームを引き伸ばす時間。アイテムがステージから削除されたときにクラスを取得してそれ自身のイベントリスナーを削除する方法はありますか? – redconservatory

答えて

1

あなたのボタンインスタンスにイベントリスナーをクリアするためにremovedFromStageイベントを使用することができます。

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.Event; 
    import flash.events.MouseEvent; 

    public class Button extends MovieClip 
    { 
     public function Button():void 
     { 
      addListeners(); 
     } 

     private function addListeners():void 
     { 
      this.addEventListener(Event.ADDED_TO_STAGE, addedHandler); 
      this.addEventListener(Event.REMOVED_FROM_STAGE, removedHandler); 
      this.addEventListener(MouseEvent.CLICK, clickHandler); 
     } 

     private function addedHandler(event:Event):void 
     { 
      trace("button added"); 
     } 

     private function removedHandler(event:Event):void 
     { 
      trace("button removed"); 
      removeListeners(); 
     } 

     private function clickHandler(event:MouseEvent):void 
     { 
      trace("button clicked"); 
     } 

     private function removeListeners():void 
     { 
      this.removeEventListener(Event.ADDED_TO_STAGE, addedHandler); 
      this.removeEventListener(Event.REMOVED_FROM_STAGE, removedHandler); 
      this.removeEventListener(MouseEvent.CLICK, clickHandler); 

      trace("has added listener: " + this.hasEventListener(Event.ADDED_TO_STAGE)); 
      trace("has removed listener: " + this.hasEventListener(Event.REMOVED_FROM_STAGE)); 
      trace("has click listener: " + this.hasEventListener(MouseEvent.CLICK)); 
     } 
    } 
}