gpt4 book ai didi

actionscript-3 - AS3 : How to remove movieclip properly without Error 1009 overflow?

转载 作者:行者123 更新时间:2023-12-04 04:30:02 24 4
gpt4 key购买 nike

我有一个 Catcher 类,它可以让您控制游戏中的动画片段。我正在尝试对游戏进行编程,以便它完成并且您可以重新启动。所以我需要删除所有内容并返回菜单。应该是一个简单的事情来解决,但我似乎无法找到如何解决。

到目前为止,我只有 ourCatcher.parent.removeChild(ourCatcher);从舞台上删除我的影片剪辑。和一个 if 语句来停止将东西放到舞台上的功能之一。 SoundMixer.stopAll();停止音乐。然后我让它转到第 3 帧,即游戏结束屏幕。

它看起来不错,但我在错误控制台中不断溢出 1009 错误,当我重新启动游戏时,速度非常慢。看起来 Catcher 中的移动功能仍在运行并产生错误,因为 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 游戏。非常感谢任何帮助,因为这几乎是完成游戏的最后一步。

最佳答案

而不是仅仅通过引用其父项来删除自身来删除子项(我必须进行测试以确保这确实有效)。在您创建/实例化 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);
}

关于actionscript-3 - AS3 : How to remove movieclip properly without Error 1009 overflow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13724406/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com