只检测一次碰撞
Have a collision only detected once
我在 spritekit 中的碰撞和代码触发的方式上遇到了一些问题。我正在使用物理接触委托和标准位掩码。碰撞一次只发生在两个物体之间。我希望检测到碰撞,然后执行一次以下代码。不幸的是,对象之间存在多点接触,导致代码触发不止一次。我的代码设置为在代码 运行 之前删除节点,但我仍然遇到这个问题。如何确保在单个点检测到碰撞或代码只会 运行 一次,在此先感谢。
你的问题有点不清楚,但我想我过去可能遇到过类似的问题。
您是否尝试过将 SKPhysicsBody(碰撞后要移除的节点的)设置为 nil?如果那是你在碰撞后做的第一件事,它不会记录任何其他碰撞并且只执行你设置的任何代码一次。
是的 - 这种情况发生了。处理它的方法(在某些情况下你不能让 sprite-kit 多次调用 didBegin
)是确保你的联系代码适应这个并且多次处理合同不会导致问题(例如多次添加到分数、删除多个生命、尝试访问已删除的节点或 physicsBody 等)。
这里有讨论:
您可以做的一些事情包括:
- 如果您删除了联系的节点,请检查它是否在
nil
之前
你删除它(对于重复的联系人)
- 将节点添加到集合中,然后删除集合中的所有节点
didFinishUpdate
- 添加一个'inactive'标志'到节点的
userData
- 使节点成为SKSpriteNode的子类并添加一个
inactive
属性
- 等等等等
我在 spritekit 中的碰撞和代码触发的方式上遇到了一些问题。我正在使用物理接触委托和标准位掩码。碰撞一次只发生在两个物体之间。我希望检测到碰撞,然后执行一次以下代码。不幸的是,对象之间存在多点接触,导致代码触发不止一次。我的代码设置为在代码 运行 之前删除节点,但我仍然遇到这个问题。如何确保在单个点检测到碰撞或代码只会 运行 一次,在此先感谢。
你的问题有点不清楚,但我想我过去可能遇到过类似的问题。
您是否尝试过将 SKPhysicsBody(碰撞后要移除的节点的)设置为 nil?如果那是你在碰撞后做的第一件事,它不会记录任何其他碰撞并且只执行你设置的任何代码一次。
是的 - 这种情况发生了。处理它的方法(在某些情况下你不能让 sprite-kit 多次调用 didBegin
)是确保你的联系代码适应这个并且多次处理合同不会导致问题(例如多次添加到分数、删除多个生命、尝试访问已删除的节点或 physicsBody 等)。
这里有讨论:
您可以做的一些事情包括:
- 如果您删除了联系的节点,请检查它是否在
nil
之前 你删除它(对于重复的联系人) - 将节点添加到集合中,然后删除集合中的所有节点
didFinishUpdate
- 添加一个'inactive'标志'到节点的
userData
- 使节点成为SKSpriteNode的子类并添加一个
inactive
属性 - 等等等等