Objective c SpriteKit-接触检测后移除物体的更好方法

Objective c SpriteKit-接触检测后移除物体的更好方法,objective-c,sprite,physics,contact,Objective C,Sprite,Physics,Contact,在某些接触/碰撞检测后,移除物体的更好方法是什么: 当接触发生时,在DIDBGENCONTACT/didEndContact中将其拆下 将需要移除的对象添加到数组中,并在整个物理模拟完成后在didSimulatePhysics中将其移除 将contact(SKPhysicsContact)对象放入数组中,并在更新方法中对其进行处理(从didBeginContact/didEndContact到一个自定义方法的所有内容都将被删除,并在更新:)中调用),处理完每个联系人后,继续执行步骤2 在我所看到

在某些接触/碰撞检测后,移除物体的更好方法是什么:

  • 当接触发生时,在DIDBGENCONTACT/didEndContact中将其拆下

  • 将需要移除的对象添加到数组中,并在整个物理模拟完成后在didSimulatePhysics中将其移除

  • 将contact(SKPhysicsContact)对象放入数组中,并在更新方法中对其进行处理(从didBeginContact/didEndContact到一个自定义方法的所有内容都将被删除,并在更新:)中调用),处理完每个联系人后,继续执行步骤2


  • 在我所看到的所有代码中,从我所做的一切来看,选项1似乎是最好的选择

    原因是didBeginContact拥有处理碰撞所需的一切。每次调用它时,都会有一个新的SKPhysicsContact对象,它允许您识别冲突中的所有内容。如果您需要删除一个对象,那么为什么不在那里删除它,或者从didBeginContact内部调用另一个方法呢。而且,就时间而言,如果你参与更新或尝试使用didSimulatePhysics,你在didBeginContact中的控制力要比你大得多。它通过调用update使其变得不必要的复杂;您应该在每次发生冲突时重写数组,以确保您没有使用旧的SKPhysicContact对象。 但是,每种情况都是不同的,所以现在很难判断其他选择何时更合适


    编辑:有时最好不要使用didBeginContact。例如,如果您想在碰撞中更改位置或移除受影响的对象,但同时又想看到物理体发生弹性碰撞,那么您就不想更改didBeginContact。

    我问过这个问题,因为不久前,我发现了一些文章,其中有人建议在模拟完成后,我们应该从模拟中删除对象。所以我想听听大家的意见。我记不清到底是哪篇文章,但这里有一个类似的例子,我认为教程建议我们在update:method中处理我们的联系人。我知道教程并没有告诉我们这是一种通用的方法,但明确建议不要在DIDBEAGIN/end contact中进行联系人处理。另外,我明白你的意思,因为每种情况都不同,所以我们不能遵循一些一般的规则。哦,我明白他们的意思。这只是将您自己的自定义实现与内置物理模拟相结合的微妙问题。请看我在编辑栏上面写的内容