[英]Fatal Error index out of range 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)”上收到“致命錯誤索引超出范圍”錯誤,有什么想法嗎?
您可以通過以相反順序遍歷數組來避免索引問題。
for b in bullets.reversed() {
...
}
[編輯]您還可以使用過濾器從陣列中移除項目符號。
例如:
bullets = bullets.filter
{
bullet in
return bullet.pos.y > self.frame.height
|| bullet.pos.y < -self.frame.height
}
請注意,我尚不清楚您的項目符號刪除測試如何產生所需的結果,但我假設它會執行您想要的操作,並且不會嘗試刪除不應刪除的項目符號。
// ====== BULLETT與玩家2之間的沖突
if canHitP2 {
if b.pos.y >= self.frame.height - P2.size.height && (b.pos.x >= P2.position.x - P2.size.width / 2 && b.pos.x <= P2.position.x + P2.size.width / 2){
print("Player 2 hit")
bullets.remove(at: bulletsChecked)
P1Scored()
P2.removeFromParent()
P2CanShoot = false
canHitP2 = false
DispatchQueue.main.asyncAfter(deadline: Delay) {
self.P2Spawn()
self.addChild(self.P2)
P2CanShoot = true
canHitP2 = true
}
}
}
//====== COLLISION BETWEEN BULLETT AND PLAYER 1
if canHitP1 {
if b.pos.y <= -self.frame.height + P1.size.height && (b.pos.x >= P1.position.x - P1.size.width / 2 && b.pos.x <= P1.position.x + P1.size.width / 2) {
print("Player 1 hit")
bullets.remove(at: bulletsChecked)
P2Scored()
P1.removeFromParent()
P1CanShoot = false
canHitP1 = false
DispatchQueue.main.asyncAfter(deadline: Delay) {
self.P1Spawn()
self.addChild(self.P1)
P1CanShoot = true
canHitP1 = true
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.