2

Does anyone know how to find or calculate the collision normal in SpriteKit. Coming from Box2D, there is a manifold method that provides the normal information, but in SpriteKit framework, the SKPhysicsContact only provides a contact point.

I am using primitive objects, plane colliding with circle, circle/rectangle collisions and circle/custom shape collisions.

Could someone please point me to the Math on calculating surface normal using the collision contact point, that would be much appreciated.

4

2 回答 2

2

更新:从 iOS 8 开始,SKPhysicsContact有一个contactNormal属性。但是,以下建议可能仍然适用,因为普通联系人并不总是按照您的意愿行事。


Box2D 计算的碰撞法线可能不是对接触法线的良好估计。许多 2D 物理引擎的碰撞检测/解决算法都是如此,可能包括 SpriteKit 的。

如果您正在寻求实现经典的 Breakout 式桨叶(在桨叶末端附近击球比在中间附近击球更偏转),这里有几个想法:

  1. 为桨使用椭圆物理体。(即使你的精灵艺术大部分是矩形,几何形状的差异可能不会让玩家注意到。)或者使用多个节点的构造,每个节点都有自己的物理体,由圆形、矩形和矩形组成更复杂的曲率。省略号。

  2. 实施碰撞后处理程序(didEndContact:didSimulatePhysics)并在碰撞后调整球的速度。您可以将接触点转换为(桨的)节点坐标,找到距桨中心的水平偏移量,并使用它来缩放或旋转球的新速度矢量。(请注意,如果您正在做这样的非平凡向量数学,您可能会发现将向量转换为很方便,vector_float2这样您就可以使用 SIMD 库提供的硬件加速向量数学函数。)

于 2013-09-30T18:12:51.933 回答
0

SKPhysicsContact包含contactNormal向量属性

于 2016-01-12T18:16:32.967 回答