2015-12-23 32 views
0

我在從陣列中刪除MovieClip時遇到問題。從陣列AS3中刪除MC

我收到此錯誤:

TypeError: Error #1009: Cannot access a property or method of a null object reference. 
at Spiker/loop()". 

尖峯(主攻手)是越來越刪除,但錯誤仍然讓我很煩。任何想法如何解決這一問題?

這裏是我的代碼:

package { 

import flash.display.MovieClip; 
import flash.events.Event; 

public class Spiker extends MovieClip { 

    public var spikeDirection:int = 1; 
    private var removed = false; 
    public function Spiker() { 
     // constructor code 
     trace("Spiker added"); 

     addEventListener(Event.ENTER_FRAME, loop); 
    } 
    private function loop (evt){ 
     this.x += spikeDirection * 10; 

     for(var i:int = 0; i < this["parent"].enemyList.length; i++){ 
      if(removed == false){ 
       if(this["parent"].enemyList[i].hitTestObject(this)){ 
        trace("Spikerhit"); 
        removed = true; 
        remove(evt); 
       } 
      } 
     } 
    } 
    public function remove (evt){ 
     removeEventListener(Event.ENTER_FRAME, loop); 
     this["parent"].removeChild(this); 
    } 

} 
+0

爲什麼使用this [「parent」]與簡單的'parent'是什麼原因? – Marty

+0

那麼,有時候只有「父母」的作品,有時它不。在我看來,在這種情況下,「父母」只會在「removeChild(this)」前面工作,而不是在「enemyList」前面,這個[「父母」]「比父母」 – schou

+0

嗯,如果對象實際上沒有父對象,那麼'parent'就是'null'。 「this [」parent「]'和'parent'之間沒有什麼區別,除了需要更長的輸入時間,而另一個在體面的IDE中提供準確的代碼建議。如果你在'if(parent!== null)'中包含了處理父項的所有內容,那麼你可能會發現你的錯誤停止了:-) – Marty

回答

1

您的問題是從for循環的到來,這一行正是:

for(var i:int = 0; i < this["parent"].enemyList.length; i++){ 

,因爲當你當前的物體接觸的enemy它是從刪除其parent,並且對於for循環的下一次迭代(如果有的話),this["parent"]null,這就是爲什麼錯誤是作爲for循環正在驗證每次迭代時確定循環結束的條件語句(您的情況爲this["parent"].enemyList.length)。

爲了避免這種情況,例如,可以使用一個變量來存儲要在for循環中使用的enemies的編號。

在刪除對象以退出該循環後,您還可以在for循環內使用break語句。

希望能有所幫助。

+0

謝謝!我還沒有測試過它,但我想,但與該行有關! (正如你可以看到我的布爾測試..) – schou