我正在用flash cs4 as3做一个平台游戏,我有很多麻烦让我的不同的类一起工作。我有一个子弹头类,敌人类,和一个确定敌人边界的保险杠类。当子弹击中敌人时,敌人的死亡动画会播放,然后两者都会从游戏中移除。当那个级别上的最后一个敌人被移除时,我得到了这个错误,说一个术语是未定义的,并且没有属性。另外,如果我把敌人杀了,他们被称为“东西不能正常工作”,我的代码肯定有一些错误。下面是我在bullet类和enemy类之间的代码:
if (enemyList.length>0) {
for (var i:int = 0; i < enemyList.length; i++) {
if (bulletList.length>0) {
for (var j:int = 0; j < bulletList.length; j++) {
if (enemyList[i].hitTestObject(bulletList[j])) {
trace("Bullet and Enemy are colliding");
enemyList[i].gotoAndPlay("dead");
bulletList[j].removeSelf();
enemyList[i].xSpeedConst=0;
enemyList[i].isDead = true;
} else {
enemyList[i].isDead = false;
}
}
}
}
}
}也是在玩家和敌人之间,保险杠和敌人之间。
if (enemyList[k].isDead == false && enemyList.length>0) {
for (var k:int = 0; k < enemyList.length; k++) {
if (enemyList[k].isDead == false && bumperList.length>0) {
for (var h:int = 0; h < bumperList.length; h++) {
if (enemyList[k].hitTestObject(bumperList[h])) {
enemyList[k].changeDirection();
}
}
}
}
}
if (enemyList[m].isDead == false && enemyList.length>0) {
for (var m:int = 0; m < enemyList.length; m++) {
if (enemyList[m].hitTestObject(player)) {
trace("player collided with enemy");
currentHP-=5;
if (currentHP<=0) {
currentHP=0;
trace("you died");
gotoAndStop(1);
}
updateHealthBar();
}
}
}对不起,它有点长,我只是觉得我在这里遗漏了一些明显的东西,或者可能我所有的代码都是结构不良的。无论哪种方式,任何帮助都将非常感谢!
发布于 2016-04-15 15:56:13
当子弹击中敌人时,你不需要将子弹和敌人从列表中删除吗?因为你做了
bulletList[j].removeSelf();这可能会从显示列表中删除项目符号,但项目符号引用仍将保留在bulletList中,并将在下一次迭代中进行检查。
另外,你的第一个检查应该是
if (enemyList.length != 0 && bulletList.length != 0)如果没有子弹,在所有敌人之间循环是没有意义的,反之亦然:)
https://stackoverflow.com/questions/36637962
复制相似问题