ios - fatal error 索引超出范围 swift 3 SpriteKit

标签 ios arrays swift sprite-kit fatal-error

我正在尝试制作一款双人射击游戏。我正在尝试销毁您已经使用过的子弹。在更新中我使用代码

 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)”上收到“ fatal error 索引超出范围”错误,有什么想法吗?

最佳答案

您可以通过以相反顺序遍历数组来避免索引问题。

for b in bullets.reversed() {
...
}

[编辑] 您还可以使用过滤器从数组中删除项目符号。

例如:

bullets = bullets.filter 
{
   bullet in 
   return bullet.pos.y >  self.frame.height 
       || bullet.pos.y < -self.frame.height
} 

请注意,我不清楚您的项目符号删除测试是如何产生所需结果的,但我假设它会按照您的意愿进行操作,并且不会尝试删除不应删除的项目符号.

关于ios - fatal error 索引超出范围 swift 3 SpriteKit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44274850/

相关文章:

c - 数组参数指针错误?

c++ - 是否有一种算法可以在排序数组中搜索不包括一个复杂度为 O(lgn) 的指定数字的元素?

ios - 在 ViewController 循环中隐藏/显示 TabBar

swift - 如何为 macOS 创建 float 搜索框

swift - Swift 是否有宇宙飞船运算符 <=>,如果没有,如何创建自定义运算符?

ios - 在模拟器上运行时获取设备型号名称?

ios - UISearchController dimsBackgroundDuringPresentation 仅当搜索文本为空时

ios - 如何以允许使用 GKStateMachine 再次输入的方式保存以前的状态?

ios - UIPanGestureRecognizer 拖动 ImageView - 如果我第二次拖动,比例会放大

仅当值不为空时才推送 Javascript 数组