我正在制作游戏,在游戏中,如你所知,当你摧毁一个物体时,你必须将它从舞台上移除。
我的敌人通过代码动态添加,如果用户返回,敌人仍然会在显示列表中。
我试图通过尝试此代码删除敌人。
removeChild(character); /removes player
removeChild(ground); // removes ground
childrenOnStage是一个数字,等于this.numChildren
for (var b:int = 0; b < childrenOnStage; b++)
{
if (getChildAt(b).name == "enemy")
{
removeChild(getChildAt(b));
}
}
当用户可以追溯到从游戏的主菜单,运行这段代码。
虽然代码会循环播放舞台上的所有孩子,但应该删除名称为敌人的代码。
但我得到一个错误
[Fault] exception, information=RangeError: Error #2006: The supplied index is out of bounds.
我的问题是,我怎么可以删除这些敌人?
如果敌人被移除了,会造成更多错误,比如“空对象”,即敌人不在舞台上,那么为什么我应该把这个敌人移走呢?
谢谢。
更新由于Chernivs回答
//after adding all of the children, this must be updated last
childrenOnStage = this.numChildren;
private function fromLevtoStart(e:MouseEvent):void
{
if (e.target == backBtn1)
{
stage.removeEventListener(Event.ENTER_FRAME, level1)
stage.addEventListener(Event.ENTER_FRAME, mainGameLoop)
//container.removeChild(_character);
removeChild(character);
removeChild(ground);
for (var b:int = 0; b < childrenOnStage; b++)
{
if (getChildAt(b).name == "enemy")
{
removeChild(getChildAt(b));
//childrenOnStage --;
//update the variable below
childrenOnStage = this.numChildren;
}
}
this.gotoAndStop("Start");
}
}
这仍然没有消除所有的敌人,但只有一个出于某种原因。
它应该循环所有在舞台上有名字的敌人并将其移除,但它不会。
在尝试下面的内容之后,我可以说它只会移除名为“敌人”和typ Goblin的goblin1。
goblin1 = new Goblin();
goblin1.name = "enemy";
goblin2 = new Goblin();
goblin2.name = "enemy";
当我杀goblin1它被删除,那么当我回到开始界面妖精2不即使这剩下的名字唯一的妖精“敌人”它只是似乎goblin1的针对性一些原因。
同样的事情发生,它只会删除goblin1。 – Moynul
每当你移除一个妖精时,减少'b'为1. – Zhafur
我明白了为什么现在,谢谢你减去b,所以我们可以将这个敌人从循环中减去,所以它可以搜索更多。谢谢你,大家好! – Moynul