起初我使用了NSTimer并遇到了帧速率被卡在每秒40帧的问题。我读过有关使用CADisplayLink解决问题的内容。它似乎工作了一段时间,但最近,应用程序从60开始,然后一段时间(约5 - 20秒)应用程序开始以40 - 41 fps运行并卡在那里。而且我正在剔除,以便在物体不在视野时吸取的次数减少,但它仍然停留在那里。一个似乎可以解决问题片刻(大约10秒钟)的一种不寻常的方法是断开电线与iphone底部的连接,然后重新连接。显然,这不是理想的,但只是想知道为什么会发生这种情况,为什么它会在某种程度上解决它,好像它会重置某些值或某些东西。非常感谢任何帮助,谢谢。
答案 0 :(得分:4)
您是否检查过是否实际丢帧?您是否正在使用CPU / GPU,只能在一秒钟内绘制40帧,或者是软件中的某个问题?
请记住,如果CADisplayLink
无法触发屏幕刷新(由于主线程忙于处理绘制前一帧),那么它可能会跳过它,因为它没有足够的时间去完成。因此,如果你的某些帧的绘制时间超过0.01666 ...秒,你将错过画画帧的间隔,并且减速可能会比它更糟糕。
还要记住,移动设备并不总是能够快速绘制所有内容。 iPhone 4中的A4处理器非常好,但是仍然需要每秒60次填充960x640屏幕像素。如果您的帧速率是40fps而不是60fps,绝大多数用户都不会注意到 - 人眼通常不会注意到抖动或屏幕延迟,直到你的速度提高到20fps左右。
答案 1 :(得分:3)
我在3G上遇到了同样的问题。我已将我的应用程序简化为仅通过空白(粉红色)后备缓冲区绘制的FPS计数器,但它仍为40 fps。
经过一些谷歌搜索后,我发现在cocos2d-iphone.org论坛上讨论了一个非常类似的问题。
解决方案是关闭视图控制器的自动旋转。所以我让我的shouldAutorotateToInterfaceOrientation总是返回NO,这有效(!!!)。我有稳定的60 FPS。然后我将我的简单游戏画面返回,它稳定了60 FPS。但我希望以横向模式运行的游戏目前正在默认的纵向模式下运行。
我不想编写自己的自动旋转代码,所以看起来我正在切换回40 fps。有人知道如何避免这种自动旋转帧速率下降吗?
答案 2 :(得分:0)
这里的问题相同。我有一个非常基本的openGL视图(旋转立方体),它以60fps开始,一旦我执行一项繁重的任务以减慢它的速度,它从未达到60fps并且它以稳定的40fps稳定下来。我正在使用CADisplayLink,它只是在测试应用程序上运行,基本上没有尝试过这个问题:/
如果有人有解决方案,我将非常感激。