游戏开发:游戏开发者如何在不考虑FPS的情况下保持游戏速度?

时间:2011-08-22 09:40:01

标签: performance maintainability frame-rate

假设一个角色在游戏中花了一秒钟,如果FPS是10fps,30fps,100fps等,游戏开发者如何将跳跃时间保持在1秒? - 如果你找到我,你将如何停止游戏的fps基本上影响游戏速度。

我认为有一种方法可以做到这一点,所以我想知道究竟是什么?

Thankssss, 亚历!

3 个答案:

答案 0 :(得分:6)

通常使用计时器记录自最后一帧渲染以来经过的时间。有关该主题的文章和样本可通过Google获取:

当然,如果您的FPS被允许任何,那么您最终会得到不切实际的模拟。出于这个原因,有一个“固定时间步骤”的概念。

“修复你的时间步!” (以及之前在该页面上链接的文章)特别是关于这一主题的很好的阅读。

答案 1 :(得分:1)

大型主题的简短回答
我想你的游戏应该放置“动画”不是由它的帧序列号确定,而是由参考的时间延迟确定...

1)例子:只有3个绘图的1秒跳跃...应该考虑绘制#1 a t0绘制#2如果在t + 0.25和t + 0.75之间并绘制#3如果在t + 0.75和t + 1之间

2)示例:如果您的移动/动画由像positionX(int RelativeFrameNumber)这样的公式确定,您应该考虑使用像positionX(long relativeTimeInMillisecond)这样的时间来改变你的功能

或游戏圈中的小变化 3)在循环中放置一个“等待”代码,该代码根据连续/固定的计算帧速率性能进行校准

希望有帮助

答案 2 :(得分:0)

许多物理引擎通过某种update()方法传递时间差。

void update(float dt)

此增量值表示与固定帧速率(例如60fps)成比例的当前帧步长。例如,如果dt为1.0,则为60fps;如果dt为2.0,则为30fps;如果dt为0.5,则为120fps ..等等。

要以任何帧速率以相同速度移动(以您的情况为例)字符,请将dt乘以对象的速度矢量,以保持字符以相同速度跳跃。

void update(float dt)
{
    myChar.Vel += myChar.Direction.Normalized() * myChar.Speed * dt;
    //myChar.Speed is in meters per second    
}

注意:二次物理需要不同的计算。