仅检测到一次碰撞



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

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

这里有一个讨论:Sprite-Kit为单个联系人注册多个冲突

您可以执行的一些操作包括:

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

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

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

最新更新