2012-10-21 63 views
1

everyone。AS3 Bullet Removal

我試圖讓他們一旦離開屏幕,我的子彈情況下遭到刪除,但我得到這個:

Error 1061: Call to a possibly undefined method removeChild through a reference with static type __AS3__.vec:Vector.<Bullet>.

這是錯誤引導到:

private function manageBullets(event:Event):void { 

    for each(var i in bManager.bulletVector){ 

     if (i.y < -20) { 

      bManager.removeChild(i);  //This line 
      bManager.bulletVector = bManager.bulletVector.splice(bManager.bulletVector.indexOf(i), 1); 

     } 
    } 
} 

我對AS3/OOP相當陌生,所以不要對我太難:P

+1

什麼是'bManager'?你在哪裏添加子彈?我們需要看到更多的代碼。 –

回答

2

你正在做兩件不正確的事情:

1)嘗試在矢量對象上調用removeChild()方法。 removeChild()子方法只能在DisplayObjectContainer和它的後代類中訪問。

2)您將其自己的元素之一分配給由splice()返回的bulletVector,因此在此表達式之後bulletVector不再是向量而是它是子彈對象。如果bManager的類沒有被定義爲動態的,這應該給你「TypeError」。

我想你的代碼應該是這樣的:

private function manageBullets(event:Event):void { 

    for each(var i in bManager.bulletVector){ 

     if (i.y < -20) { 

      if(i.parent != null) //Check if i is in display list 
      { 
        i.parent.removeChild(i); //Remove i from display list 
      } 

      /* And then just remove i from vector no need to handle returned value.*/ 

      bManager.bulletVector.splice(bManager.bulletVector.indexOf(i), 1); 

     } 
    } 
} 
+0

完美地工作,但我被告知,你不應該使用父欄幾個案例。這是一個例外嗎? – David

+1

我已經在幾個我的項目中使用了這個練習沒有問題,但無論如何,如果你有一個,那麼你應該保持對父/容器DisplayObject的引用,並做如下檢查:if(parentDisplayObject.contains(i)){parentDisplayObject.removeChild一世); }' – ggat