2

我有一个运行频率为 60hz 的 NSTimer。加载和渲染 OpenGL 场景后,我的游戏可以全天稳定地获得 60fps。然后如果我去重新编译应用程序或重新加载它,它将获得 40fps。加载相同的资源。我多年来一直遇到这个问题,我只想知道为什么。这太疯狂了,我想知道我是否应该放弃这个愚蠢的计时器。我的 3GS 负载之间的情况没有什么不同。有时它只会达到40fps。显然,负载之间的时钟速率没有差异,因此性能数据应该在恒定场景下保持恒定。这是我的帧率日志:

一个很好的负载::-)

帧率:61 帧率:61 帧率:61 帧率:60 帧率:60 帧率:61 帧率:60 帧率:60 帧率:61 帧率:60 帧率:61

现在,我将继续什么都不做,重新编译并运行:

帧率:43 帧率:50 帧率:45 帧率:48 帧率:40 帧率:45 帧率:42 帧率:41 帧率:42 帧率:44 帧率:41 帧率:46

^- 视觉上的巨大差异。飞天到底是什么原因造成的?

相同的场景区域,相同的相机设置。没有变量是不同的。

[编辑] 有人提到,音乐未在硬件解码器中运行会导致这种情况,有时即使您设置解码器也不会接管。但是,我可以说即使禁用了音乐,这种情况也会发生 [/Edit]

4

1 回答 1

2

您是否尝试过使用CADisplayLink?从文档中:

CADisplayLink 对象是一个计时器对象,它允许您的应用程序将其绘图与显示器的刷新率同步。

...

一旦显示链接与运行循环相关联,当屏幕内容需要更新时,就会调用目标上的选择器。

我没有亲自使用过它,但它看起来可能会帮助您解决帧速率较低的任何问题,即使它本身不会增加您的帧速率。

于 2010-04-28T01:35:22.473 回答