考虑这样的游戏循环:
while (gamerunning) {
if (it is time to update physics)
update(fixedTickDuration);
alpha = percent of tick elapsed;
draw(alpha);
}
更新功能根据速度等移动对象,目前也进行碰撞处理。绘制函数在先前和当前实体状态之间进行插值以绘制中间表示。它始终落后于一帧。
问题:我们是否应该使用实体插值坐标在绘图函数中进行碰撞检测和处理?绘图功能中的这种处理可以进一步改变绘制的内容。
答案 0 :(得分:1)
不,由于一些原因,主要是你不想依赖渲染速度进行游戏更新。您可以将游戏更新帧速率修复为适当的值,并允许渲染率根据处理环境而变化(根据功能更快或更慢)。
独立于变量FPS的恒定游戏速度的示例:
while( game_is_running ) {
loops = 0;
while( GetTickCount() > next_game_tick && loops < MAX_FRAMESKIP) {
update_game();
next_game_tick += SKIP_TICKS;
loops++;
}
interpolation = float( GetTickCount() + SKIP_TICKS - next_game_tick )
/ float( SKIP_TICKS );
display_game( interpolation );
}
来自游戏循环注意事项的非常好的概述代码: