【问题标题】:flash as3 cannot create property 0 on boolean?flash as3 不能在布尔值上创建属性 0?
【发布时间】:2016-04-14 22:38:01
【问题描述】:

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

【问题讨论】:

  • 我首先尝试添加enemyDead = true;没有 [i] 但效果很糟糕,非常感谢任何帮助
  • enemyDead 是什么?一个数组还是一个布尔值?
  • 请使用调试器并指出引发错误的确切行。很可能您打算这样做:enemyList[i].enemyDead = true;(因为您的enemyDead 标志应该是敌人对象的属性)。或者,如果它是一个单独的数组,那么你的 else if 应该是:enemyDead[i] = false; 否则你将它设置为布尔值而不是数组
  • enemyDead 是一个布尔值,我应该把它变成一个数组吗?我试过你的enemyList[i].enemyDead = true;它说不能创造属性敌人死敌
  • 你必须打开你的敌人类并添加属性。 public var enemyDead:Boolean = false;

标签: actionscript-3 flash


【解决方案1】:

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

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

enemyDead[i] = true;

这假定enemyDead var 是数组或对象,其属性对应于i 中包含的值。

但是,在后面的 hist test else 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;

【讨论】:

  • 是的,这似乎是问题所在,知道如何解决它吗?我尝试设置enemyDead = false;对 var s 的属性我设置了enemyDead[s] = false;但这只会让事情变得更糟。感谢您提供帮助
  • 我添加了推荐的解决方案。
  • @Dan - 你明白这一切了吗?如果这导致您找到解决方案,请接受答案,如果没有,您可以自己回答问题。接受的答案有利于未来的访问者快速找到答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-21
  • 1970-01-01
  • 2012-12-03
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多