私は2人のシューティングゲームを作ろうとしています。私はすでに使用している弾丸を破壊しようとしています。アップデートで私はコードを使用しています致命的なエラーインデックスが範囲外です。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")
}
また、アップデートの最後にbulletChecked + = 1があります。このコードは、プレーヤー1とプレーヤー2が同時に撮影しない限り正常に動作します。それから、「bullets.remove(at:bulletsChecked)」の「範囲外の致命的なエラーインデックス」エラーが表示されます。
あなたが弾丸を削除すると、あなたは残りの弾丸のインデックスをオフに投げる間の衝突。修正するには2つの方法があります。1)箇条書きを削除していないときに増分のみをチェックします。または、2)あなたの配列の '(index、b)のためにbullets.enumerated()に逆方向に反復する(' {箇条書きが条件を満たす場合{bullets.remove(at:index)}} ' – vacawama
あなたは2つのより良い方法で進むことができます:1)画面の物理ループを追加し、それに接触する弾を取り除く。 2)弾丸を撃つとき(私はapplyImpulseだと思います)、少し時間がたつと弾を取り除くSKActionのシーケンスを追加します。あなたのコード、使用するvar弾丸をmantainたい場合は=(を設定して)、今、あなたは –