AS3:hitTestObject在没有明显原因的情况下变为空

时间:2015-06-27 23:39:29

标签: arrays actionscript-3 null typeerror hittest

我正在编写游戏代码,在代码的一部分中,它会检查玩家是否足够接近mArray中的怪物,以显示其健康栏。我使用hitTestObject进行此操作,var i递增以查看列表。但是,我会随机收到此错误消息:

TypeError: Error #2007: Parameter hitTestObject must be non-null.

在第一次看到这个之后,我将测试全部置于条件if (mArray.length > 0)之下以确保在尝试测试之前填充了Array()...但它仍然在随机时间发生。我甚至使用trace(i)来查看它是否发生在列表的某个部分,但每个调试会话都是完全随机的!我知道player部分不能为空,因为它在hitTest期间一直在屏幕上,所以我现在不知所措。

有问题的代码部分(除了在不同的地方使用mArray[i]外,没有其他任何内容与此相关):

for (var i:int = 0; i < mArray.length; i++) {
    if (mArray.length > 0) {

        trace(i); //my attempt to see if it occurred at a specific incrementation of i

        if (player.hitTestObject(mArray[i])) {
            mArray[i].healthBar.visible = true;
        } else {
            mArray[i].healthBar.visible = false;
        }

    }
}

同样,除了随机情况之外,它总是适用于所有时间,它给了我TypeError。这只是我的代码中的一个打嗝,是否有一些我忽略的明显问题,或者代码是否只是想回到2007

编辑:调试会话始终指向if (player.hitTestObject(mArray[i]))的行。

1 个答案:

答案 0 :(得分:0)

对于某些imArray[i]的值为null。要么确保在填充数组时不会发生这种情况,要么只需在hitTestObject行中添加额外的检查,如下所示:

if (mArray[i] && player.hitTestObject(mArray[i])) { ... }

我不知道你的游戏架构,但是将hitTestObject测试移动到怪物类而不是从外部检查会更方便。典型的方法是让每个实体都有某种“更新”方法,在每个游戏循环中执行一次。