5

起初我使用 NSTimer 并遇到帧速率卡在每秒 40 帧的问题。我已阅读有关使用 CADisplayLink 解决问题的信息。它似乎工作了一段时间,但最近,应用程序从 60 开始,然后过了一会儿(大约 5 - 20 秒),应用程序开始以 40 - 41 fps 运行并卡在那里。而且我正在剔除,以便在物体不在视野范围内时减少绘制,但它仍然卡在那里。一种似乎确实可以暂时解决问题的不寻常方法(大约 10 秒)是将电线从 iphone 底部断开,然后重新连接。显然,这并不理想,只是想知道为什么会发生这种情况以及为什么它会在某种程度上修复它,就好像它重置了某些值或其他东西一样。任何帮助将不胜感激,谢谢。

4

3 回答 3

4

您是否检查过您是否真的在丢帧?您是否使用 CPU/GPU 到了每秒只能绘制 40 帧的程度,或者问题出在软件的某个地方?

请记住,如果 aCADisplayLink无法触发屏幕刷新(由于主线程忙于绘制前一帧之类的事情),那么它可能会跳过它,因为它没有足够的时间来完成。因此,如果您的某些帧绘制时间超过 0.01666... 秒,您将错过立即绘制帧的时间间隔,并且减速可能看起来比实际情况更糟。

还要记住,移动设备并不总是能够快速绘制所有内容。iPhone 4 中的 A4 处理器非常好,但要每秒填充 60 次 960x640 屏幕像素仍然是一项艰巨的任务。如果您的帧速率是 40fps 而不是 60fps,绝大多数用户都不会注意到——人眼通常不会注意到抖动或屏幕延迟,直到您达到 20fps 或更低。

于 2011-01-01T18:21:54.703 回答
4

我在3G上遇到了同样的问题。我已经将我的应用程序简化为在空白(粉红色)后缓冲区上绘制的 FPS 计数器,但它仍然是 40 fps。

经过一番谷歌搜索后,我发现 cocos2d-iphone.org 论坛上正在讨论一个非常相似的问题。

解决方案是关闭视图控制器的自动旋转。所以我让我的 shouldAutorotateToInterfaceOrientation 总是返回 NO,这很有效(!!!)。我有稳定的 60 FPS。然后我返回了我的简单游戏图形,它稳定在 60 FPS。但我预计以横向模式运行的游戏目前以默认纵向模式运行。

我不想编写自己的自动旋转代码,所以看起来我要切换回 40 fps。有人知道如何避免这种自动旋转帧率下降吗?

于 2011-06-14T07:32:15.750 回答
0

这里同样的问题。我有一个非常基本的 openGL 视图(旋转立方体),它以 60fps 开始,一旦我运行一项繁重的任务以减慢它的速度,它就再也不会回到 60fps 并且它稳定在 40fps。我正在使用 CADisplayLink,它只是在一个测试应用程序上运行,基本上没有尝试这个问题:/

如果有人有解决方案,我将不胜感激。

于 2011-02-09T13:49:07.247 回答