限制jframe中的帧速率

时间:2016-09-24 09:08:23

标签: java jframe cpu-usage

所以我做了一个基于文本的小冒险,它目前正占据我的CPU的45%-50%,因为它正在不断检查你的输入。所以我需要某种方式来限制帧速率/更新速率。当我尝试将thread.sleep(15)放入检查玩家输入的循环时,它会停止对传递给它的输入做任何事情。我已经看到了类似的问题,但给出的答案仅适用于实际具有渲染方法的游戏,并且即使使用jtextareas和jtextfeilds,我也不需要任何渲染方法。因此,提供的解决方案对我不起作用。帮助

1 个答案:

答案 0 :(得分:0)

Thread.sleep完全暂停当前线程,当你使用thread.sleep时,你可以防止线程中发生任何事情。因此没有检测到输入。这是我修改的游戏循环,用于删除渲染更新部分。同时(真实)方法非常滞后,通常不推荐。

如果要激活它,可以调用此循环。

public static void main(String[] args) {
    loop(0);
}

public static void loop(int looptype) {
    long lastTime = System.nanoTime();
    double ns = 1000000000 / 60.0;
    double delta = 0;
    long timer = System.currentTimeMillis();
    while(running) {
        long now = System.nanoTime();
        delta += (now - lastTime) / ns;
        lastTime = now;
        while (delta >= 1) {

            if (looptype == 0) {
                *something*
                if (input.equals("1")) {
                    loop(1);
                } else if (input.equals("2")) {
                    loop(2);
                }
            } else if (looptype == 1) loop1(); 
            else if (looptype == 2) loop2();

            delta--;
        }
        if (System.currentTimeMillis() - timer > 1000) {
            timer += 1000;
        }
    }
}

public static void loop1() {
*something*
}

public static void loop2() {
*something*
}