我正在使用flash cs4进行平台游戏,我遇到了这个错误。当玩家射击敌人并且我的子弹类与我的敌人类发生碰撞时,就会发生这种情况。这是我的代码错误在enemyDead [i] = true;线
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");
enemyDead[i] = true;
bulletList[j].removeSelf();
enemyList[i].xSpeedConst=0;
} else if(enemyList.length>0){
enemyDead = false;
}
}
}
}
}
}
enemyDead当然是一个布尔变量,似乎导致了这个问题。我已经工作了几个小时这个修复,但不知道怎么(我是菜鸟)一切正常,除了敌人继续移动,即使我将xspeedConst属性设置为0并且子弹不会自行移除请帮助
答案 0 :(得分:2)
您的问题的根源很可能是您尝试以两种不同的方式使用var。
在点击测试中,您可以:
enemyDead[i] = true;
这假定enemyDead
var是一个数组或一个对象,其属性对应于i
中包含的值。
但是,在hist测试中,if if语句稍后执行此操作:
enemyDead = false;
现在将enemyDead
var视为原始布尔值。如果该var是一个原始布尔值,那么上面的(enemyDead[i] = true
)将会出错,因为布尔值没有属性(所以如果i
为0,则没有设置enemyDead.0属性)。
您的解决方案是确保始终使用enemyDead var。你已经说过它是一个布尔值,但如果它绑定到enemyList
数组中的各个对象,它似乎更有意义。 (现在,你有一个enemyDead var,它的值将在你的数组的每次迭代中被覆盖,并在for循环结束时留下最后一项的值)
我建议修改你的敌人类以包含isDead
属性:
//in your Enemy.as file:
public var isDead:Boolean = false;
然后在命中测试中设置:
enemyList[i].isDead = true;