什么是使沙粒在视图中动画的最佳方法?
基本上,我想用小沙子状颗粒物半填充iOS设备的屏幕,然后允许用户旋转和摇晃设备来控制沙子的位置。
假设我以前从未进行过任何物理编程,有人可以推荐一篇教程或向我展示如何完成吗?
谢谢,
查询。
更新: 我现在遇到了this(我的应该是2D)-如何将类似的东西引入我的应用程序?
假设我以前从未进行过任何物理编程,有人可以推荐一篇教程或向我展示如何完成吗?
谢谢,
查询。
更新: 我现在遇到了this(我的应该是2D)-如何将类似的东西引入我的应用程序?
使用空间索引来查找最近的粒子以检测碰撞,并使用积分技术进行力(加速度)-速度-位置之间的转换,仅使用重力作为外部力将为您提供沙盒。
如果使用后碰撞检测,则需要选择一个好的由粒子势能导出的排斥力。
我建议您使用截断的Lennar-Jones势和Verlet积分器。比Runge-Kutta更容易,比Euler更精确。因为它用于分子动力学。您不需要使用其他力。只需使用排斥力、重力和壁力即可。
如果您的模拟器中有子弹,您可以为其使用欧拉积分。我认为这对于自由落体但不碰撞的沙粒是可接受的。当它们彼此靠近时,最好使用Verlet或Runge-Kutta。
上述所有内容都假定您的积分步骤非常大,以至于能量不会被保留甚至会减少。如果您的积分足够好以保持能量不变,则需要给您的粒子摩擦力以使沙子减速,否则您的粒子将到处爆炸。
如果你想在iPhone上实现这个功能,那么你必须考虑一些优化和技巧,因为iPhone无法真正模拟水或沙子。
你的技巧是大部分工作都是绘制场景。
在Box2D中创建一个带有球的场景,球的大小比沙粒大10-20倍。
iPhone可以模拟它。
然后你应该每个球绘制10-20个沙粒。
每一帧你可以检查球是否与其他球碰撞。
如果球没有碰撞,那么这些沙粒就在空中,你应该在彼此之间的某个距离上绘制它们。
如果球与其他球碰撞,则应该一起渲染颗粒。
你还可以检测边缘并在顶部渲染滑翔机沙边界。