【问题标题】:AS3: hitTestObject turning up null for no apparent reasonAS3:hitTestObject 无明显原因变为 null
【发布时间】:2015-09-14 16:13:45
【问题描述】:

我目前正在编写一个游戏,在代码的一部分中,它正在检查玩家是否与mArray 中的怪物足够近,以使其健康条出现。我为此使用hitTestObjectvar 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])) 的行。

【问题讨论】:

  • 请发布mArray[i] 的其他用途以及您对这个数组所做的所有事情。

标签: arrays actionscript-3 null typeerror hittest


【解决方案1】:

对于某些imArray[i] 似乎有一个空值。确保在填充数组时不会发生这种情况,或者只是在 hitTestObject 行中添加额外的检查,如下所示:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多