在Sprite Kit中执行碰撞的物理计算

Che*_*ees 46 collision-detection ios sprite-kit skphysicsbody

我正在尝试使用Sprite Kit设置一些弹性碰撞.正如我在Sprite Kit Physics Collision Issue中提到的那样,多个物体彼此靠近的情况存在问题

我对碰撞情况的时机感到困惑.

我试着设置dynamicNO-didBeginContact:委托方法,计算最终速度,然后在-didEndContact:设定的dynamicYES,然后正确设置速度.

我希望它在碰撞之外是动态的原因是因为我想要摩擦/重力等.订单/逻辑有什么问题?我看了一下-didSimulatePhysics方法,但它似乎不是要走的路.

Ben*_*ane 5

我正在尝试使用Sprite Kit设置一些弹性碰撞

我觉得你在这里误解了物理学.弹性碰撞是碰撞的过度简化.实际上,没有碰撞会导致完美的能量转移.我已经解释的物理位置在回答你链接到相关的问题.

我怀疑你会看到在SpriteKit中可以看到"弹性"碰撞,但大多数人都没有意识到你需要在物体之间留出空间.您不应该进行自己的物理计算.


小智 1

我不确定这是否正是您想要做的,但如果我想在没有 SpriteKit 帮助的情况下计算碰撞结果,同时将所有其他物理留给 SpriteKit,我会执行以下操作:

  1. 将该dynamic属性始终设置为YES
  2. categoryBitMask为每种对象设置属性。
  3. collisionBitMask对象的属性设置为您想要保留自动碰撞计算的所有categoryBitMask 的析取(例如,墙壁,但不是其他对象),或者如果您想要手动处理所有碰撞,则将属性设置为零。
  4. 将对象的属性设置contactTestBitMask为您想要手动计算碰撞的任何内容。
  5. 计算并设置所有结果速度didBeginContact

(简而言之,将您的对象从其自己的对象中排除collisionBitMask。)

此链接可能会有所帮助:使用碰撞和接触