C – 使用glfwGetTime()进行固定的时间步长

在使用glfwGetTime()在我的C项目中进行一些研究和调试之后,我无法为我的项目制作游戏循环.到目前为止,我真的只在
Java中使用纳秒,在GLFW网站上它声明该函数以秒为单位返回时间.如何使用glfwGetTime()进行固定时间步循环?

我现在拥有的 –

while(!glfwWindowShouldClose(window))
    {
            double now = glfwGetTime();
            double delta = now - lastTime;
            lastTime = now;

            accumulator += delta;

            while(accumulator >= OPTIMAL_TIME) // OPTIMAL_TIME = 1 / 60
            {
                     //tick

                    accumulator -= OPTIMAL_TIME;
            }

}

最佳答案 您只需要这个代码来限制更新,但保持渲染尽可能高的帧.该代码基于此
tutorial,非常好地解释了它.我所做的就是用GLFW和C实现相同的原则.

   static double limitFPS = 1.0 / 60.0;

    double lastTime = glfwGetTime(), timer = lastTime;
    double deltaTime = 0, nowTime = 0;
    int frames = 0 , updates = 0;

    // - While window is alive
    while (!window.closed()) {

        // - Measure time
        nowTime = glfwGetTime();
        deltaTime += (nowTime - lastTime) / limitFPS;
        lastTime = nowTime;

        // - Only update at 60 frames / s
        while (deltaTime >= 1.0){
            update();   // - Update function
            updates++;
            deltaTime--;
        }
        // - Render at maximum possible frames
        render(); // - Render function
        frames++;

        // - Reset after one second
        if (glfwGetTime() - timer > 1.0) {
            timer ++;
            std::cout << "FPS: " << frames << " Updates:" << updates << std::endl;
            updates = 0, frames = 0;
        }

    }

你应该有一个用于更新游戏逻辑的函数update()和一个用于渲染的render().希望这可以帮助.

点赞