我已经成功使用Farseer开发了一个基于XNA的游戏。该游戏在Windows和WP7上运行得非常好。我目前正在使用Monotouch和Monogame将我的游戏移植到IOS。我已经成功地编译和使用了Farseer在Monotouch和Monogame上的第一个版本中。除了性能之外,一切都很好。游戏在iPhone设备上运行得更慢。我进行了一些代码调查,似乎主要的瓶颈是Farseer。当它必须管理单个fixture附加的5-6个bodies时,它变得非常缓慢(circle)。
阅读文档后,我注意到可以通过修改Setting静态类的值来调整Farseer:
性能
为了充分利用引擎,您应尝试遵循以下准则:
启用休眠
休眠使您可以在世界中拥有大量实体。它还可以增加引擎的稳定性,因为一堆实体中的小移动不会在堆中传播。休眠体的开销很小,因此建议启用它。
禁用CCD
连续碰撞检测可以防止穿隧,但代价是性能。如果您没有穿隧问题,应完全禁用CCD。
尽量减少位置和速度迭代的次数
高迭代次数会使引擎更加稳定,但代价是性能。您应根据自己的游戏调整这些值。
坏消息是,如果我更改该类的任何值,似乎什么都没有发生。我尝试按以下方式更改值:
阅读文档后,我注意到可以通过修改Setting静态类的值来调整Farseer:
性能
为了充分利用引擎,您应尝试遵循以下准则:
启用休眠
休眠使您可以在世界中拥有大量实体。它还可以增加引擎的稳定性,因为一堆实体中的小移动不会在堆中传播。休眠体的开销很小,因此建议启用它。
禁用CCD
连续碰撞检测可以防止穿隧,但代价是性能。如果您没有穿隧问题,应完全禁用CCD。
尽量减少位置和速度迭代的次数
高迭代次数会使引擎更加稳定,但代价是性能。您应根据自己的游戏调整这些值。
坏消息是,如果我更改该类的任何值,似乎什么都没有发生。我尝试按以下方式更改值:
EnableDiagnostics = false
VelocityIterations = 6
PositionIterations = 2
ContinuousPhysics = false
我尝试过将VelocityIterations设置为1等较低的值,但似乎没有任何改变...
是否有人已经更改了Settings类的值以提高性能?