flash as3无法在布尔值上创建属性0?

问题描述:

我正在使用flash cs4进行平台游戏,并且遇到了此错误。当玩家射击敌人并且我的子弹类与我的敌人类碰撞时会发生这种情况。这里是我的代码,错误是在enemyDead [i] = true; lineflash as3无法在布尔值上创建属性0?

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当然是一个布尔变量,它似乎是导致问题的原因。我一直在这个修复工作了几个小时,但不知道如何(我是noob)一切工作正常,除了敌人继续移动,即使我把xspeedConst属性设置为0,并且子弹不会自行移除,请帮助

+0

我第一次尝试添加enemyDead = TRUE;没有[i]但它工作可怕,任何帮助,非常感谢 – Dan

+0

什么是'enemyDead'?一个数组或布尔? – akmozo

+0

请使用调试器并指出抛出错误的确切线。你最可能的意思是:'enemyList [i] .enemyDead = true;'(因为你的敌人死亡标志应该是敌方物体的属性)。或者,如果它是一个单独的数组,那么你的else if应该是:'enemyDead [i] = false;'否则你将它设置为一个布尔值而不是一个数组 – BadFeelingAboutThis

你的问题的根源很可能是你试图以两种不同的方式使用var。

在你的命中测试,你这样做:

enemyDead[i] = true; 

这假定enemyDead变种是数组或具有相应于包含在i值属性的对象。

然而,在其他if语句后的HIST测试,你这样做:

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; 
+0

是的,似乎是问题,任何想法如何解决它虽然?我尝试设置enemyDead = false;属性到var s我使enemyDead [s] = false;但它只会让事情变得更糟。我很感谢你试图帮助 – Dan

+0

我增加了一个推荐的解决方案。 – BadFeelingAboutThis

+0

感谢您的帮助! – Dan