适用于iOS的Sand Physics

时间:2012-09-15 13:36:51

标签: objective-c ios cocoa game-physics collision

在视图中制作沙粒的最佳方法是什么? 基本上,我想在iOS设备的屏幕上填充一些小的沙子状颗粒,然后让用户旋转并摇动设备以决定沙子的位置。

假设我以前从未做过任何物理编程,有人可以推荐一个教程或告诉我它是如何完成的吗?

谢谢,

查询。

更新 我现在遇到this(我应该是2D) - 我怎么能把类似的东西带到我的应用程序中?

2 个答案:

答案 0 :(得分:1)

使用spatial indexing查找最近的粒子以检查碰撞,并使用integration technique进行力(加速度) - 速度位置之间的过渡,并仅使用重力作为外部源给你你的沙箱。

如果您使用碰撞后检测,则需要选择一个商品exclusion-force derived from a particle-potential

我建议你使用Truncated Lennar-Jones潜力和Verlet-Integrator。比Runge-Kutta更容易,比Euler更精确。因为它用于分子动力学。你不需要使用其他力量。只需使用排斥力,重力和墙力。

如果您的模拟器中有子弹,则可以使用Euler-Integration。我认为这对于自由落体但不会碰撞沙粒是可以接受的。在他们彼此关闭之后,最好使用Verlet或Runge-Kutta。

我上面提到的所有内容都假设你的整合步骤太大,以至于能量不会得到保存甚至减少。如果你的积分足以保存能量,你将需要让你的粒子friction force使沙子变慢,否则你的粒子就会在任何地方爆炸。

答案 1 :(得分:0)

如果你想在iphone上制作,那么你必须考虑某些优化和技巧,因为iPhone无法真正模拟水或沙子。

你的诀窍是你的大部分工作都是画画。

在Box2D中创建场景,球的大小比砂粒大10-20倍。

iPhone可以模拟它。

然后你应该每球吸10-20个沙粒。

每一帧都可以检查球是否与其他球碰撞。

如果球没有碰撞,那么这些沙粒就会在空中,你应该将它们相互拉开一定距离。

如果球与其他球碰撞,那么粒子应该一起渲染

您也可以检测边距并在顶部渲染滑翔机沙边。