有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java游戏开发:如何限制FPS?

我正在写一个游戏,我看到FPS算法不能正确工作(当他必须计算更多的时候,他会睡得更长…)所以,问题很简单:如何计算睡眠时间以获得正确的FPS

我知道在微秒内更新游戏一帧需要多长时间,当然还有我想要达到的FPS

我正在疯狂地寻找一个简单的例子,但我找不到一个

<代码>可以是爪哇、C++或伪…p>

共 (4) 个答案

  1. # 1 楼答案

    试试看

    static const int NUM_FPS_SAMPLES = 64;
    float fpsSamples[NUM_FPS_SAMPLES]
    int currentSample = 0;
    
    float CalcFPS(int dt)
    {
        fpsSamples[currentSample % NUM_FPS_SAMPLES] = 1.0f / dt;
        float fps = 0;
        for (int i = 0; i < NUM_FPS_SAMPLES; i++)
            fps += fpsSamples[i];
        fps /= NUM_FPS_SAMPLES;
        return fps;
    }
    

    。。。根据http://www.gamedev.net/community/forums/topic.asp?topic_id=510019

  2. # 2 楼答案

    渲染一帧所需的时间为1/FPS秒(如果目标为10 FPS,则应在每帧上花费1/10=0.1秒)。因此,如果渲染时间为X秒,则应“睡眠”时间为1/FPS - X

    将其转换为例如毫秒,您将得到

    ms_to_sleep = 1000 / FPS - elapsed_ms;
    

    如果出于某种原因,渲染帧的时间超过了1/FPS,那么您将得到一个负的睡眠时间,在这种情况下,您显然只是跳过了睡眠时间

  3. # 3 楼答案

    每帧的微秒数为1000000 / frames_per_second。如果你知道你花了elapsed_microseconds计算,那么你需要睡眠的时间是:

    (1000000 / frames_per_second) - elapsed_microseconds
    
  4. # 4 楼答案

    看看this关于不同FPS处理方法的文章