我有一个类Catcher,可以让你控制游戏中的动画片段。我正在尝试对游戏进行编程以使其完成并且您可以重新启动。所以我需要删除所有内容并返回菜单。应该是一个简单的事情要解决,但我似乎无法找到如何。
到目前为止,我只有myCatcher.parent.removeChild(ourCatcher);从舞台上删除我的movieclip。还有一个if语句来阻止将某些东西丢到舞台上的一个函数。 SoundMixer.stopAll();停止音乐。然后我就进入第3帧,即游戏画面。
它看起来很好,但我在错误控制台中出现了不断的1009错误,当我重新启动游戏时,它超级慢。看起来Catcher中的移动功能仍然在运行并且因为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游戏。非常感谢任何帮助,因为这几乎是完成我的游戏的最后一步。
答案 0 :(得分:0)
而不仅仅是通过引用其父项来删除子项(我必须进行测试以确保它确实有效)。在创建/实例化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);
}
答案 1 :(得分:0)
if (ourCatcher.parent) ourCatcher.parent.removeChild(ourCatcher);
else trace("Catcher without a parent still plays! DEBUG THIS!");
基本上,你最有可能失去捕手的控制流,也就是说,它似乎试图将自己从舞台上移除两次。在它第一次移除后,它的parent
变为空,因此为1009.而且,当你遇到2028时,同样的理由适用,你的捕手不再是任何地方的孩子。