0

私がFlashゲーム用に持っているレベルのMovieClipsのいくつかには、私が作成したカスタムビルドのカメラを制御する特定のMovieClipがあります。カメラとMovieClipの両方が正しくスムーズに機能します。ただし、レベルが完了してゲームから削除されるとError #1009、機能が認識されなくなりcheckCameraZoomます。また、このMovieClipはコードで動的に追加されるのではなく、実行前にライブラリから指定されたレベルのMovieClipsに配置されます。このエラーを修正する方法はありますか?

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 に答える