如何定义在SFML游戏中使用多少CPU?

QAp*_*pps 4 c++ cpu cpu-usage sfml

我做了一个游戏,但我不知道游戏在其他设备上的工作方式是否相同.例如,如果计算机的CPU很高,玩家和敌人会移动得更快吗?如果是这样,有没有办法在SFML中定义可用的CPU使用率?玩家和敌人在我的程序中移动的方式是:1 - 检查按键是否按下2 - 如果是这样:move(x,y); 或者有没有办法让CPU在移动功能中执行一些操作.谢谢!

Con*_*uit 5

听起来你担心游戏的物理特性会受到游戏帧速率的影响.你的直觉很好地为你服务!这是一个重大问题,如果您希望您的游戏感觉专业,您可以解决这个问题.

根据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非常有效,即使这样,最好有一个应急计划.

为了更彻底的治疗,我建议您阅读链接的文章.