我设置了一个游戏,玩家在游戏中控制飞船并射击来袭的敌人。当一个子弹和一个敌人接触时,不会崩溃,但是当两个子弹击中2个不同的敌人时,我在以下函数中崩溃了。(EXC_Breakpoint)
我该如何解决?
谢谢!
if body1.categoryBitMask==PhysicsCategories.Bullet && body2.categoryBitMask==PhysicsCategories.Enemy && (body2.node?.position.x)!<self.size.width{
最佳答案
所有的Sprite-Kit碰撞都在2个物体之间-您不能让2个子弹击中2个敌人。如果看起来好像有一颗子弹同时击中了2个敌人,那么您实际上会得到一个 call :子弹didBegin()
和一个敌人,另一个 call 子弹和另一个敌人。但是,如果您为第一次碰撞的子弹做removeFromParent()
,那么对于第二次碰撞您可能会遇到问题,因为子弹的节点将是nil
,尽管子弹的物理体仍然存在。
在SO上搜索“Sprite Kit多次碰撞”,因为这是一个常见问题,有多种解决方法。描述的最简单方法是,不对应该“销毁”的节点执行removeFromParent
,而是将其添加到数组(或更恰当的说是一组)中。然后在didFinishUpdate
中,遍历此集合并删除其中的所有节点。
关于swift - Spritekit联系人检测崩溃(EXC_breakpoint),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48834094/