我正在编写游戏代码,在代码的一部分中,它会检查玩家是否足够接近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]))
的行。
答案 0 :(得分:0)
对于某些i
,mArray[i]
的值为null。要么确保在填充数组时不会发生这种情况,要么只需在hitTestObject
行中添加额外的检查,如下所示:
if (mArray[i] && player.hitTestObject(mArray[i])) { ... }
我不知道你的游戏架构,但是将hitTestObject
测试移动到怪物类而不是从外部检查会更方便。典型的方法是让每个实体都有某种“更新”方法,在每个游戏循环中执行一次。