iPhone OpenGL和NSTimer问题

时间:2010-04-28 00:59:43

标签: iphone nstimer

我有一个运行在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]

1 个答案:

答案 0 :(得分:2)

您是否尝试过使用CADisplayLink?来自documentation

  

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

     

...

     

显示链接关联后   运行循环,选择器上   在屏幕上调用目标   内容需要更新。

我个人没有使用它,但看起来它可能会帮助您解决帧速率较低的任何问题,即使它不会提高帧速率本身。