我读过,游戏对象的速度不应该受到FPS的阻碍,而应该基于时间。如何分隔更新/绘制代码以在不限制绘制速率的情况下最大化性能,并提供基于时间的恒定逻辑更新速率?
我当前的伪代码如下
loop
{
draw();
if (ticksElapsed() > 100)
{
update();
ticks+= ticksElapsed();
}
}
问题在于绘图代码阻碍了update()速率的性能。而且它消耗了100%的cpu,因为如果引发了睡眠,它将同时中断两个绘图/逻辑功能。
我也在使用SDL,它似乎没有vsync选项。我也听说过固定和可变时步的术语,但是我不确定用sleep()如何做到这一点。
1
您不需要浪费100%的CPU功率来等待,如果ticksElapsed()<100,则在while循环的末尾放置sleep(0)。如果没有其他线程可以立即返回线程想跑。但不再浪费100%的CPU能力。
—
Maik Semder 2011年
但是,这种1线程设置的最佳解决方案是使用vsync,如果无法进行vsync,则循环调用sleep(0)直到达到目标帧速率,然后进行更新和绘制
—
Maik Semder 2011年