我正在使用flash cs4 as3制作一个平台游戏,并且在让我的不同课程一起工作方面遇到了很多麻烦。我有一个子弹类,敌人类和一个确定敌人边界的碰碰类。当子弹击中敌人时,敌人死亡动画播放,然后两者都从游戏中移除。当该级别的最后一个敌人被删除时,我得到这个错误,说一个术语未定义且没有属性。此外,如果我按顺序杀死敌人,他们被称为事情不能正常工作,我的代码必须有一些错误。这是子弹和敌人类之间的代码:
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();
}
}
}
对不起它有点长,我只是觉得我在这里遗漏了一些明显的东西,或者我的所有代码都很差。无论哪种方式,任何帮助将不胜感激,谢谢!
答案 0 :(得分:0)
一旦子弹击中敌人,你不需要从列表中移除子弹和敌人吗?因为你做了
bulletList[j].removeSelf();
可能会从显示列表中删除子弹,但子弹引用仍将保留在bulletList中,并将在下一次迭代时进行检查。
你的第一次检查应该是
if (enemyList.length != 0 && bulletList.length != 0)
如果没有子弹,没有必要循环通过所有敌人,反之亦然:)