如何发现如果OpenGL ES帧速率是口吃 – 没有仪器?

一位朋友问我这个有趣的问题,我没有回答这个问题。

他正在制作一个游戏,有时候他在帧率方面落后了。 就好像有10个或更多的帧被丢弃。

运行循环function由CADisplayLink调用。

有没有一种方法来告诉编程如果帧速率滞后? 我只是测量运行循环函数中的时间,然后检查它是否大于应该的值。 如果是的话,请记住有一个滞后。

在旅途中的各种设备上testing可能会有用。 你如何去跟踪这个没有连接到Xcode?

正确的方法是用delta(lastTime和now之间的区别),像这样:

CFTimeInterval time; time = CACurrentMediaTime(); if (lastTime == 0) { delta = 0.0; } else { delta = time - lastTime; } lastTime = time; 

但是他应该在游戏中使用这个三angular洲更多的东西,帧率总是变幻莫测,所以任何时间敏感的东西都应该被三angular洲所抵消。

假设你想更新一个有速度的对象的位置,应该是这样的:

 objectXPos.pos = delta/targetDelta*objectXSpeed; 

目标三angular洲将是完美的帧速率,例如60 fps会给你一个1/60 = 0.0167的目标Delta

这样游戏不会受到较差的performance影响。

你也应该实施一种灾难模式,比如血腥的事情停止一秒钟或更长时间,你可以select不更新游戏逻辑,在这种情况下,比用户神奇的事情要好。 这部分取决于游戏的types,第二个可能是矫枉过正的,也许0.033 s已经太多了(一半的帧率)

简单。 递增每帧渲染的整数帧计数variables。 每秒钟或每十秒设置一个重复的NSTimer。 在计时器callback中,在1秒或10秒内对帧计数器的进度进行采样,并在隐藏的debugging视图中显示最小/最大/平均值,或者附加一个可以使用文档共享获取的日志文件。