2012-04-28 57 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