0

在我的 Flash 游戏的某些关卡 MovieClip 中,有一个特定的 MovieClip 可以控制我创建的定制相机。相机和 MovieClip 都能正确流畅地运行。但是,每当一个关卡完成并从游戏中删除时,我都会收到Error #1009无法识别该checkCameraZoom功能的消息。此外,此 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;
        }
    }
}
4

1 回答 1

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);
    }
于 2012-04-28T09:32:56.763 回答