2015-06-27 47 views
0

我目前正在編碼遊戲,並且在代碼的一部分中,它檢查玩家是否足夠接近mArray中的怪物,以便其健康欄顯示。我使用hitTestObjectvar i增加通過列表。不過,我會隨機收到此錯誤信息:AS3:hitTestObject無理由變爲空

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

看到這是第一次後,我把所有測試下的條件if (mArray.length > 0),以確保陣列()甚至試圖在測試前充滿..但它仍然會隨機發生。我甚至使用trace(i)來查看它是否發生在列表的某個部分,但每次調試會話都是完全隨機的!我知道player部分不能爲null,因爲它在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

請發佈'mArray [i]''的其他用途,以及您對此數組所做的一切事情。 – null

回答

0

它看起來像一些imArray[i]有一個空值。要麼確保填充陣列時,這不會發生,或者只是添加額外的檢查中hitTestObject一行:

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

我不知道你的遊戲架構,但也許這將是移動更方便hitTestObject測試到怪物類而不是外部檢查。典型的做法是讓每個實體都擁有某種「更新」方法,並在每個遊戲循環中執行一次。