簡體   English   中英

致命錯誤指數超出范圍迅速3 SpriteKit

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM