我已经成功地使用 Farseer 来使用 XNA 开发我的游戏之一。该游戏在Windows和WP7中运行得像灵符。我目前正在使用 Monotouch 和 Monogame 将游戏移植到 IOS 中。在通过Monotouch和Monogame移植的游戏的第一个版本中,我已经成功编译并使用了Farseer。除表演外,其他一切正常。游戏在iPhone设备上的运行速度要慢得多。我做了一些代码调查,似乎的主要瓶颈是Farseer。当必须用一个夹具(圆圈)来管理5-6个以上的物体时,它变得非常缓慢。
阅读文档时,我注意到要调整Farseer,我可以从Setting静态类中更改值:
表现
为了充分利用引擎,您应该尝试并遵循以下准则:
启用 sleep
sleep 使您可以拥有世界上大量的 body 。由于一堆车体中的微小运动不会在该堆中扩散,因此还可以提高发动机的稳定性。 sleep 的 body 几乎没有开销,因此建议启用它。
禁用CCD
连续碰撞检测可以防止隧道传输,但是会降低性能。如果您在隧道传输方面没有任何问题,则应同时禁用CCD。
最小化位置和速度迭代次数
大量的迭代使引擎以性能为代价变得更加稳定。您应该调整值以适合您的游戏。
坏消息是,如果我更改该类的任何值,似乎什么也没有发生。我试图更改值,如下所示:
EnableDiagnostics = false
VelocityIterations = 6
PositionIterations = 2
ContinuousPhysics = false
我也尝试使用像VelocityIterations = 1这样的较低值,但似乎什么都没有改变...。
有人已经更改了设置类的值来提高性能吗?
最佳答案
好的,
我已经做到了。主要瓶颈与Farseer 无关。解决了所有与“错误代码”相关的性能问题后,如上所述调整Farseer的效果非常好,可以获得5-10%的性能。
我的游戏是用XNA编写的,成功地将iOS移植到具有monotouch和mono4android的Android。
关于iphone - 更改Farseer物理引擎设置以提高性能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8293696/