仅检测到一次碰撞

时间:2019-01-14 15:33:15

标签: swift sprite-kit collision

我在spritekit和代码触发方式方面遇到一些冲突问题。我正在使用物理联系代表和标准位掩码。一次仅在两个对象之间发生碰撞。我希望检测到冲突,然后一次执行以下代码。不幸的是,对象之间有多个接触点,导致代码触发不止一次。我的代码设置为在代码运行之前删除节点,但是我仍然遇到此问题。我要如何确保在单个点上检测到冲突,或者确保该代码只能运行一次,请先感谢。

2 个答案:

答案 0 :(得分:0)

您的问题尚不清楚,但我想我过去可能也遇到过类似的问题。

您是否尝试将SKPhysicsBody(碰撞后要删除的节点)设置为nil?如果那是冲突后您要做的第一件事,它将不会注册任何其他冲突,而只会执行您一次设置的任何代码。

答案 1 :(得分:0)

是的-发生这种情况。处理它的方法(在某些情况下,您无法让sprite-kit多次不调用didBegin)是确保您的联系代码可以容纳该代码,并且多次处理合同不会造成问题(例如,多次添加分数,删除多个生命,尝试访问已删除的节点或PhysicalBody等)。

这里有一个讨论:Sprite-Kit registering multiple collisions for single contact

您可以做的一些事情包括:

  • 如果您删除了已联系的节点,请先检查其是否为nil 您将其删除(用于重复的联系人)
  • 将节点添加到集合中,然后从以下位置删除集合中的所有节点 didFinishUpdate
  • 向节点的userData添加一个“无效”标志
  • 将节点设为SKSpriteNode的子类,并添加一个inactive属性
  • 等等。