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

时间:2016-04-14 22:38:02

标签: actionscript-3 flash

我正在使用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并且子弹不会自行移除请帮助

1 个答案:

答案 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;