我建立了一个游戏,玩家可以控制一艘船并射击敌人。当One Bullet和ONE敌人接触时,没有崩溃,但是当两颗子弹击中2个不同的灌木时,我在下面的func中发生了撞击。(EXC_Breakpoint)(所有子弹都有相同的physicCategory,所有敌人都有相同的physicsCategory。
我该如何解决这个问题? 谢谢!
if body1.categoryBitMask==PhysicsCategories.Bullet && body2.categoryBitMask==PhysicsCategories.Enemy && (body2.node?.position.x)!<self.size.width{
答案 0 :(得分:1)
所有Sprite-Kit碰撞都在2个物体之间 - 你不能有2个子弹击中2个敌人。如果看起来好像1个子弹同时击中了2个敌人,那么你实际得到的是向didBegin()
发出子弹和一个敌人以及另一个对子弹和另一个敌人的召唤。但是,如果你为第一次碰撞做了removeFromParent()
子弹,那么你可能会遇到第二次碰撞的问题,因为子弹节点将是nil
,尽管子弹的物理体仍然存在。
在SO上搜索“Sprite Kit多次碰撞”,因为这是一个常见问题,有几种方法可以处理它。最简单的描述方法是对应该被“销毁”的节点执行removeFromParent
,而不是将它们添加到数组中(或者更恰当地说是一组)。然后在didFinishUpdate
中,遍历此集合并删除其中的所有节点。