我制作了一个游戏,但不确定游戏在其他设备上是否能以相同方式工作。例如,如果电脑的CPU速度很快,玩家和敌人会移动得更快吗?如果是这样,请问是否有一种方法来定义SFML中可用的CPU使用情况呢?在我的程序中,玩家和敌人移动的方式是: 1-检查按键是否被按下 2-如果是:执行move(x,y)函数;或者,是否有一种方法让CPU在move函数中执行一些操作呢? 谢谢!
我制作了一个游戏,但不确定游戏在其他设备上是否能以相同方式工作。例如,如果电脑的CPU速度很快,玩家和敌人会移动得更快吗?如果是这样,请问是否有一种方法来定义SFML中可用的CPU使用情况呢?在我的程序中,玩家和敌人移动的方式是: 1-检查按键是否被按下 2-如果是:执行move(x,y)函数;或者,是否有一种方法让CPU在move函数中执行一些操作呢? 谢谢!
逻辑上讲,你必须将更新与绘制一帧所需的时间分离开来。一个简单的解决方案是:[处理时间不当的游戏循环可能使] 物理模拟的行为取决于传入的增量时间。这可能会导致游戏的“感觉”因帧率略有不同,也可能极端到弹簧模拟爆炸到无穷大、快速移动的对象穿过墙壁以及玩家掉进地面!
伪代码如下:
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();
}
consume_time
产生的时间。如果对consume_time
的调用时间过长,则产生的时间可能需要在下一帧进行两次调用 - 然后是四次 - 然后是八次 - 依此类推。如果您使用此方法,您将需要确保consume_time
非常高效,即使如此,最好还是有备用计划。