我正在嘗試製作雙人射擊遊戲。我試圖摧毀你已經使用過的子彈。在更新我使用的代碼致命錯誤索引超出範圍swift 3 SpriteKit
var bulletsChecked = 0
for b in bullets {
if b.pos.y > self.frame.height || b.pos.y < -self.frame.height {
bullets.remove(at: bulletsChecked)
print("destroy old bullets")
}
我也有bulletsChecked + = 1在更新結束。此代碼工作正常,除非玩家一和玩家二同時拍攝。然後我得到「bullets.remove(at:bulletsChecked)」上的「致命錯誤索引超出範圍」錯誤「任何想法?
當你刪除一顆子彈,你甩開剩餘子彈的指標。兩種修復方法1)只有當你沒有刪除子彈時才增加子彈檢查。或者2)向後遍歷你的數組'for(index,b)in bullets.enumerated()。reversed(){if bullet met criteria {bullets.remove(at:index)}}' – vacawama
如果你想刪除在屏幕之外,您可以採用兩種更好的方式:1)添加屏幕的物理循環並移除與其接觸的子彈。 2)當你射擊子彈(我認爲是applyImpulse)時,添加一段SKAction,在延遲一段時間後刪除子彈。如果你想保持你的代碼,使用var bullets =設置(),現在你可以使用b.remove –