我有一个运行在60hz的NSTimer。加载和渲染OpenGL场景后,我的游戏可以整天获得60fps,稳定。然后,如果我去重新编译应用程序或重新加载它,它将获得40fps。加载相同的资源。多年来我一直在遇到这个问题,我只想知道原因。这很疯狂,我想知道我是否应该放弃这个愚蠢的计时器。我的3GS负载之间的条件没有差别。它有时会达到40fps。显然,时钟速率在负载之间没有差异,因此在给定恒定场景的情况下,性能数据应该是恒定的。这是我的帧率的日志:
好负荷:: - )
FrameRate:61 FrameRate:61 FrameRate:61 FrameRate:60 FrameRate:60 FrameRate:61 FrameRate:60 FrameRate:60 FrameRate:61 FrameRate:60 FrameRate:61
现在,我将继续做任何事情,重新编译并运行:
FrameRate:43 FrameRate:50 FrameRate:45 FrameRate:48 FrameRate:40 FrameRate:45 FrameRate:42 FrameRate:41 FrameRate:42 FrameRate:44 FrameRate:41 FrameRate:46
^ - 视觉上的巨大差异。飞扬的原因是什么?
场景的相同区域,SAME相机设置。没有变数是不同的。
[编辑]有人提到没有在硬件解码器中运行的音乐可能导致这种情况发生,有时解码器即使你设置它也不会接管。但是,我可以说即使音乐已禁用,也会发生[/ Edit]
答案 0 :(得分:2)
您是否尝试过使用CADisplayLink
?来自documentation:
CADisplayLink对象是一个计时器 允许您的应用程序的对象 将其绘图与刷新同步 显示率。
...
显示链接关联后 运行循环,选择器上 在屏幕上调用目标 内容需要更新。
我个人没有使用它,但看起来它可能会帮助您解决帧速率较低的任何问题,即使它不会提高帧速率本身。