AS3:如何在没有错误1009溢出的情况下正确删除movieclip



我有一个Catcher类,它可以让你控制游戏中的电影剪辑。我正在尝试对游戏进行编程,以便游戏结束,您可以重新启动。所以我需要删除所有内容并返回菜单。这应该是一件简单的事情,但我似乎不知道如何解决。

到目前为止,我只有我们的Catcher.parent.removeChild(我们的Catcher);把我的电影从舞台上撤下来。和一个if语句来停止其中一个将东西放到舞台上的函数。SoundMixer.stopAll();停止音乐。然后我把它转到第3帧,也就是游戏结束屏幕。

它看起来很好,但我在错误控制台中不断出现1009个错误,当我重新启动游戏时,速度非常慢。Catcher中的移动函数似乎仍在运行,并产生了一个错误,因为Catcher已从阶段中删除,现在为null。

我知道我需要取消引用与Catcher有关的所有内容,但在我的情况下,我无法在网上找到任何文档来做这件事。每个人似乎都有不同的方法,我试过了,但都不起作用。

Catcher类中我用来移动角色的两个函数:

public function Catcher(stageRef:Stage) 
{
stop();
this.stageRef = stageRef;
key = new KeyObject(stageRef);

addEventListener(Event.ENTER_FRAME, loop, false, 0, true);
}
//movement
public function loop(e:Event):void
{           
if (key.isDown(Keyboard.A))
vx -= walkSpeed;
else if (key.isDown(Keyboard.D))
vx += walkSpeed;
else
vx *= friction;
//update position
x += vx;
//speed adjustment
if (vx > maxspeed)
vx = maxspeed;
else if (vx < -maxspeed)
vx = -maxspeed;
//stay inside screen
if (x > stageRef.stageWidth)
{
x = stageRef.stageWidth;
vx = -vx
}
else if (x < 0)
{
x = 0;
vx = -vx;
}

if (key.isDown(Keyboard.A))
{
scaleX = -1;
}
else if (key.isDown(Keyboard.D))
{
scaleX = 1;
}
movement();
// Jumping
jump += gravity;
if (y > stage.stageHeight /1.5)
{ 
jump = 0;
canJump = true;
}
if (key.isDown(Keyboard.SPACE) && canJump)
{
jump = -10;
canJump = false;
}
y += jump;

}

我从舞台上删除东西的另一个类叫做CatchingGame,它有一个删除对象的函数,我把游戏放在那里的代码上,以备playerlives==0时使用。

if (playerLives == 0 )
{
stop();
ourCatcher.parent.removeChild(ourCatcher);
SoundMixer.stopAll();
gotoAndStop(3);
}

我可能犯了一个小错误,因为这是我的第一个flash游戏。我们非常感谢任何帮助,因为这几乎是我完成比赛的最后一步。

而不是通过引用其父项来移除子项(我必须进行测试以确保这确实有效)。在创建/实例化Catcher的同一位置创建一个函数,该函数首先删除eventListener ENTER_FRAME,然后删除Catcher。

if (playerLives == 0 ) {
stop();
removeCatcher();
SoundMixer.stopAll();
gotoAndStop(3);
}
// new location in the main code where the catcher is created
function removeCatcher():void {
ourCatcher.cleanUp();
removeChild(ourCatcher);
}
// in the Catcher class
function cleanUp():void {
removeEventListener(Event.ENTER_FRAME, loop);
}
if (ourCatcher.parent) ourCatcher.parent.removeChild(ourCatcher);
else trace("Catcher without a parent still plays! DEBUG THIS!");

基本上,你很可能会失去对捕手的控制,也就是说,它似乎两次试图离开舞台。在其第一次移除自身之后,其parent变为空,因此为1009。而且,当你打出2028分时,同样的原因也适用,你的捕手不再是任何地方的孩子。

相关内容

最新更新