听起来你担心游戏的物理特性会受到游戏帧速率的影响.你的直觉很好地为你服务!这是一个重大问题,如果您希望您的游戏感觉专业,您可以解决这个问题.
根据Glenn Fiedler的Gaffer on Games文章"修复你的时间步长!"
您在打发时间增量[游戏循环是不正确地处理时间可以使]你的物理模拟的行为[取决于].为让您的游戏略有不同的"感觉",这取决于帧速率的影响可能是微妙的,也可能是当你的弹簧模拟爆炸到无限时,快速移动的物体穿过墙壁,玩家从地板上掉下来!
逻辑规定您必须从绘制帧所花费的时间中分离更新的依赖项.一个简单的解决方案是:
在伪代码中:
time_pool = 0;
timestep = 0.01; //or whatever is safe for you!
old_time = get_current_time();
while (!closed) {
new_time = get_current_time();
time_pool += new_time - old_time;
old_time = new_time;
handle_input();
while (time_pool > timestep)
{
consume_time(timestep); //update your gamestate
time_pool -= timestep;
}
//note: leftover time is not lost, and will be left in time_pool
render();
}
Run Code Online (Sandbox Code Playgroud)
值得注意的是,这种方法有其自身的问题: 未来的帧必须消耗调用产生的时间consume_time.如果呼叫consume_time花费的时间太长,产生的时间可能需要在下一帧进行两次调用 - 然后是四次 - 然后是八次 - 依此类推.如果你使用这种方法,你必须确保consume_time非常有效,即使这样,最好有一个应急计划.
为了更彻底的治疗,我建议您阅读链接的文章.
| 归档时间: |
|
| 查看次数: |
143 次 |
| 最近记录: |