9

以前可能有人问过,但我在任何地方都找不到...

在 videoland 中,24 fps 及以上的任何内容都很流畅。Cocos2d 似乎只有在 60 fps 或更低的情况下才流畅。30 到 50 之间的任何东西肯定不平滑,fps 计数器似乎不准确......

为什么是这样?还是只有我有这种情况?

4

2 回答 2

25

这种行为实际上有几个原因,它不仅仅是 cocos2d,而是在启用垂直同步(VSYNC) 的环境中的任何游戏引擎中都可以看到的效果。在 iOS 上,VSYNC 始终处于开启状态,在 PC 上,如果帧率始终低于显示器的帧率,您通常可以选择将其关闭以提高帧率,但代价是屏幕撕裂。通常,像 iOS 设备这样的 LCD 以 60 Hz 的频率更新其显示,最高允许 60 fps。

Cocos2D 1.x 默认使用CADisplayLink类进行更新,Cocos2D 2.x 只使用 CADisplayLink。CADisplayLink 使更新与屏幕刷新率同步。这意味着当屏幕完成绘制其内容时会发送通知。

当您获得 60 fps 时,一切都很好。但如果游戏无法及时渲染帧以渲染 60 fps,则只有在下一次屏幕刷新完成后才会收到下一次更新。一旦帧速率下降到略低于 60 fps,或者换句话说,只要您的更新和渲染周期需要超过 16.666 毫秒才能完成,这就会有效地将帧速率减半。这意味着在带有 CADisplayLink 更新的 iOS 上,您只能拥有 60、30、20 和 15 fps(60 除以 1、2、3 和 4)的离散帧速率。

效果非常明显,因为在 60、30、20 和 15 fps 之间波动的帧速率 - 即使只是几分之一秒 - 感觉并不平滑,主要是因为它非常不稳定 - 不稳定是我们注意到的“不平滑” ”。如果您的游戏受此影响,您可能会发现将帧速率限制为 30 fps 实际上会使游戏看起来更流畅。您还有更多时间在帧之间更新和渲染内容。

24 fps 电影帧速率的稳定性被认为是“流畅的”,但电影导演也学会了避免有限帧速率变得太明显的场景。例如,他们避免了游戏经常做的事情:横向滚动,即摄像机的横向移动或经过摄像机的物体的横向移动。

当您观看《霍比特人》时,您会惊讶于电影的流畅程度——这是第一部以 48 fps 运行的大片。您会立即注意到电影中的角色更加“真实”和“栩栩如生”。要获得印象,请查看这个非官方的 48 fps 霍比特人预告片

cocos2d 显示的 fps 并不是从 60 到 30 到 20 和 15 fps 切换的准确表示,而是几帧的平均帧率。因此,当 cocos2d 打印“45 fps”时,这意味着游戏在过去几帧中显示 30 fps 的一半时间,另一半以 60 fps 显示。

于 2012-12-12T09:23:19.570 回答
2

两个主要问题。

首先是匹配显示器的刷新率——其他任何事情,你都会得到眼睛/大脑擅长发现的不规则运动。至少是它的倍数。

其次是运动模糊。电影/视频往往具有运动模糊,这会欺骗观众看到连续运动。

于 2012-12-11T23:30:00.387 回答