调整Farseer物理引擎设置以提高性能

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

我尝试过将VelocityIterations设置为1等较低的值,但似乎没有任何改变...

是否有人已经更改了Settings类的值以提高性能?


1
你可以尝试在http://gamedev.stackexchange.com/上提问。由于该社区专注于游戏开发(似乎有很多XNA开发人员),因此你可能会在那里获得更好的答案。 - Dan Rigby
Mono非常慢。可能没有任何方法可以改变设置以提高速度。 - ClassicThunder
不是真的,ClassicThunder,Mono和Monotouch在iOS上表现非常出色。我已经解决了这个问题,并发现Farseer并不是主要瓶颈。 - Francesco
1个回答

1

好的,

我已经解决了这个问题。主要瓶颈与Farseer无关。一旦我解决了与“差劣代码”相关的所有性能问题,像上面描述的那样调整Farseer就可以很好地提高5-10%的性能。

我的游戏是用XNA编写的,成功地使用monotouch和mono4android移植到iOS和Android平台。


你应该了解SlimTune(或nProf)-- 在查找代码瓶颈方面非常有帮助。 - jgallant
你能否评论一下你是如何提高性能的?在3GS设备上运行正常吗? - Notbad
嗨,Notbad。你是在问如何提高Farseer或MyGame/MonoTouch/Monogame的性能吗?是的,它可以在3GS上运行。你可以自己尝试一下我的游戏。它叫做“Smashing Planets”,并且在AppStore上是免费的。 - Francesco

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接