只检测一次碰撞

Have a collision only detected once

我在 spritekit 中的碰撞和代码触发的方式上遇到了一些问题。我正在使用物理接触委托和标准位掩码。碰撞一次只发生在两个物体之间。我希望检测到碰撞,然后执行一次以下代码。不幸的是,对象之间存在多点接触,导致代码触发不止一次。我的代码设置为在代码 运行 之前删除节点,但我仍然遇到这个问题。如何确保在单个点检测到碰撞或代码只会 运行 一次,在此先感谢。

你的问题有点不清楚,但我想我过去可能遇到过类似的问题。

您是否尝试过将 SKPhysicsBody(碰撞后要移除的节点的)设置为 nil?如果那是你在碰撞后做的第一件事,它不会记录任何其他碰撞并且只执行你设置的任何代码一次。

是的 - 这种情况发生了。处理它的方法(在某些情况下你不能让 sprite-kit 多次调用 didBegin)是确保你的联系代码适应这个并且多次处理合同不会导致问题(例如多次添加到分数、删除多个生命、尝试访问已删除的节点或 physicsBody 等)。

这里有讨论:

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

  • 如果您删除了联系的节点,请检查它是否在 nil 之前 你删除它(对于重复的联系人)
  • 将节点添加到集合中,然后删除集合中的所有节点 didFinishUpdate
  • 添加一个'inactive'标志'到节点的userData
  • 使节点成为SKSpriteNode的子类并添加一个inactive 属性
  • 等等等等