【发布时间】:2017-10-31 16:09:03
【问题描述】:
我正在尝试制作一个两人射击游戏。我正在尝试摧毁你已经使用过的子弹。在更新中我使用的是代码
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 index out of range”错误有什么想法吗?
【问题讨论】:
-
删除一个项目符号时,会丢弃剩余项目符号的索引。两种修复方法 1) 只有在您没有删除项目符号时才增加 bulletsChecked。或 2) 向后遍历您的数组
for (index,b) in bullets.enumerated().reversed() { if bullet meets criteria { bullets.remove(at: index) }} -
如果您想移除屏幕外的子弹,您可以通过两种更好的方式进行:1)添加屏幕的物理循环并移除与其接触的子弹。 2)当你射击子弹时(我认为是applyImpulse)添加一系列SKAction,在一段时间延迟后移除子弹。如果您想维护您的代码,请使用 var bullets = Set
() 现在您可以使用 b.remove
标签: ios arrays swift sprite-kit fatal-error