2012-08-15 86 views
0

你好,我正在創建一個射擊子彈的槍的系統。AS3:矢量項目未拼接

更新功能處理是這樣的:

 var b:Bullet; 
     var l:uint = bulletList.length; 
     var i:uint; 

     for (i = 0; i < l; i++) { 
      b = bulletList[i]; 
      b.sprite.x += b.vx; 
      b.sprite.y += b.vy; 

      if (b.sprite.x > 1200 || b.sprite.x < -100 || b.sprite.y < -1000) { 
       deleteBullet(b); 
       bulletList.splice(i,1); 
      } 

     } 

    public function deleteBullet(b:Bullet) { 
     b.sprite = null; 
     b = null; 
    } 

當我拍了子彈,它去它產生一個錯誤的邊緣,有時它會創建一個新的,但一個沒有任何議案。這是我得到的錯誤:

RangeError: Error #1125: The index 1 is out of range 1.

回答

1

你得到的錯誤是因爲你在for循環中拼接你的數組。

而不是使用'l'作爲for循環的參數,直接使用bulletList.length作爲每次迭代,它將查看CURRENT長度,它將反映任何拼接出來的內容。您還需要在拼接時減去迭代器,因爲這會將所有未來的索引向下移動一個。

 for (i = 0; i < bulletList.length; i++) { 
      b = bulletList[i]; 
      b.sprite.x += b.vx; 
      b.sprite.y += b.vy; 

      if (b.sprite.x > 1200 || b.sprite.x < -100 || b.sprite.y < -1000) { 
       deleteBullet(b); 
       bulletList.splice(i,1); 
       i--; 
      } 

     } 
+0

非常感謝!當我發現這樣的錯誤時,它總是我不能想到的最簡單的事情。而且我不需要,這工作得很好! – tversteeg 2012-08-15 21:27:21

+0

我用另一個想法更新了我的答案。每當你拼接你的陣列,你最終會跳過陣列中的下一個對象,如果你不這樣做 - – BadFeelingAboutThis 2012-08-15 21:28:41

+0

哦,是的,你的權利,我從來沒有想過,但我從來沒有遇到過麻煩。 – tversteeg 2012-08-15 21:32:51