ios7 - iOS7 SpriteKit 物理中的碰撞正常

标签 ios7 game-physics xcode5 sprite-kit

有谁知道如何在SpriteKit中查找或计算碰撞法线。来自Box2D,有多种方法提供正常信息,但在SpriteKit框架中,SKPhysicsContact仅提供接触点。

我正在使用原始对象、平面与圆形碰撞、圆形/矩形碰撞以及圆形/自定义形状碰撞。

有人可以向我指出使用碰撞接触点计算表面法线的数学吗,我将不胜感激。

最佳答案

更新:从 iOS 8 开始,SKPhysicsContactcontactNormal属性(property)。但是,下面的建议可能仍然适用,因为接触法线并不总是按照您的意愿行事。


Box2D计算的碰撞法线may not be a good estimate of the contact normal 。许多 2D 物理引擎(可能包括 SpriteKit 的)的碰撞检测/解决算法都是如此。

如果您想实现经典的突破式 Racket (在 Racket 末端附近击球比在中间附近击球更能使其偏转),这里有一些想法:

  1. 使用椭圆形物理体作为桨。 (即使您的 Sprite 艺术大部分是矩形,几何形状的差异也可能不会被玩家注意到。)或者使用多个节点的构造,每个节点都有自己的物理体,从圆形、矩形和省略号。

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

关于ios7 - iOS7 SpriteKit 物理中的碰撞正常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19009058/

相关文章:

uinavigationbar - 如何去除 UINavigationBar 和 UISearchBar 细线

ios - 快速返回随机字典项

ios - 实现碰撞检测

java - 你如何在 Android Studio 中使用 3D 图形?

ios - 设置编译器标志 Xcode

XCode:当前类的更好的符号导航器

iphone - UIViewController View 在旋转设置为仅纵向时旋转

iOS 正确停止 AVCaptureSession

基于Java的图标移动

ios - 如何在 Xcode 中删除 "User Defined Runtime Attributes"?它们是什么?