2012-04-28 92 views
0

在我的Flash遊戲的某些級別的影片剪輯中,有某個影片剪輯控制着我創建的定製相機。相機和MovieClip功能都正常順利。然而,每當一個關卡完成並從遊戲中移除時,我會得到一個Error #1009不能識別checkCameraZoom函數。此外,此MovieClip不會與代碼動態添加,而是會在運行時放置在來自庫的指定級別的MovieClip中。有沒有任何可能的方法來解決這個錯誤?在刪除父MovieClip後禁用嵌套的影片剪輯

ZoomOutArea類:

package com.engine.assetHolders 
{ 
    import com.engine.documentClass.*; 
    import flash.display.*; 
    import flash.events.*; 

    public class ZoomOutArea extends MovieClip 
    { 
     public function ZoomOutArea():void 
     { 
      this.visible = false; 
      this.addEventListener(Event.ADDED_TO_STAGE, initZoomOutArea); 
      // constructor code 
     } 
     public function initZoomOutArea(event:Event):void 
     { 
      this.addEventListener(Event.ENTER_FRAME, checkCameraZoom); 
     } 
     public function checkCameraZoom(event:Event):void 
     { 
      if (Document.getInstance != null) 
      { 
       if (this.hitTestObject(MovieClip(parent.parent).player.playerHitArea)) 
       { 
        this.hitTestZoom(0.6); 
       } 
       if (! this.hitTestObject(MovieClip(parent.parent).player.playerHitArea)) 
       { 
        this.hitTestZoom(1); 
       } 
      } 
     } 
     public function hitTestZoom(zoomLevel):Number 
     { 
      MovieClip(parent.parent).cameraScale = zoomLevel; 
      return zoomLevel; 
     } 
    } 
} 
+0

您可以先製作一個虛擬函數,並查看它是否承認「虛擬」功能與否。這可能會增加情況的一些清晰度。 – 2012-04-28 17:17:17

回答

1

您註冊類ENTER_FRAME事件時,它添加到舞臺上,但你永遠不註銷它。所以這就是爲什麼它從舞臺上移開後仍然繼續下去,並且沒有parent了。 你可以添加其他偵聽Event.REMOVED_FROM_STAGE,然後取下checkCameraZoom聽衆:

public function initZoomOutArea(event:Event):void 
    { 
     this.addEventListener(Event.ENTER_FRAME, checkCameraZoom); 
     this.addEventListener(Event.REMOVED_FROM_STAGE, onRemoved); 
    } 

    private function onRemoved(event:Event):void 
    { 
     this.removeEventListener(Event.ENTER_FRAME, checkCameraZoom); 
    } 
+0

哇,似乎我完全忘記了Event.REMOVED_FROM_STAGE事件監聽器... 非常感謝您的幫助! – Blaze356 2012-04-28 17:48:38