有谁知道如何在SpriteKit中查找或计算碰撞法线。来自Box2D,有多种方法提供正常信息,但在SpriteKit框架中,SKPhysicsContact仅提供接触点。
我正在使用原始对象、平面与圆形碰撞、圆形/矩形碰撞以及圆形/自定义形状碰撞。
有人可以向我指出使用碰撞接触点计算表面法线的数学吗,我将不胜感激。
最佳答案
更新:从 iOS 8 开始,SKPhysicsContact
有 contactNormal
属性(property)。但是,下面的建议可能仍然适用,因为接触法线并不总是按照您的意愿行事。
Box2D计算的碰撞法线may not be a good estimate of the contact normal 。许多 2D 物理引擎(可能包括 SpriteKit 的)的碰撞检测/解决算法都是如此。
如果您想实现经典的突破式 Racket (在 Racket 末端附近击球比在中间附近击球更能使其偏转),这里有一些想法:
使用椭圆形物理体作为桨。 (即使您的 Sprite 艺术大部分是矩形,几何形状的差异也可能不会被玩家注意到。)或者使用多个节点的构造,每个节点都有自己的物理体,从圆形、矩形和省略号。
实现碰撞后处理程序(
didEndContact:
或didSimulatePhysics
)并在碰撞后调整球的速度。您可以将接触点转换为( Racket 的)节点坐标,找到距 Racket 中心的水平偏移,并使用它来缩放或旋转球的新速度矢量。 (请注意,如果您正在进行这样的重要向量数学运算,您可能会发现将向量转换为vector_float2
很方便,这样您就可以使用 SIMD 库提供的硬件加速向量数学函数。 )
关于ios7 - iOS7 SpriteKit 物理中的碰撞正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19009058/