Defasagens em loop do jogo

FireTrade:

É o meu código de loop do jogo:

public void run() {
    running = true;

    boolean renderCheck = false;
    double firstTime = 0;
    double lastTime = System.nanoTime() / 1000000000.0;
    double passedTime = 0;
    double unprocessedTime = 0;

    double frameTime = 0;
    int frames = 0;
    int fps = 0;

    while (running) {
        firstTime = System.nanoTime() / 1000000000.0;
        passedTime = firstTime - lastTime;
        lastTime = firstTime;

        unprocessedTime += passedTime;
        frameTime += passedTime;

        while (unprocessedTime >= UPDATE_CAP) {
            tick();
            unprocessedTime -= UPDATE_CAP;
            renderCheck = true;
        }

        if (frameTime >= 1.0) {
            frameTime = 0;
            fps = frames;
            frames = 0;
            System.out.println(fps);
        }

        if (renderCheck) {
            render();
            frames++;
            renderCheck = false;
        } else {
            try {
                Thread.sleep(1);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

É uma zona de render:

private void render() {
    BufferStrategy bs = this.getBufferStrategy();
    if (bs == null) {
        this.createBufferStrategy(3);
        return;
    }

    Graphics graphics = bs.getDrawGraphics();

    graphics.setColor(Color.black);
    graphics.fillRect(0, 0, WIDTH, HEIGHT);

    handler.render(graphics);

    graphics.dispose();
    bs.show();
}

E aqui está uma parte carrapato (não é necessário mostrar outro código de manipulador porque vai ser tanta coisa para ler):

private void tick() {
    handler.tick();
}

Assim, o principal problema é na próxima coisa. Ao pressionar o botão de meu caráter tem que começar a se mover. E, na verdade, ele faz, mas com alguns atrasos que tornam este processo de olhar terrível. Que depois de um segundo, tudo está indo perfeitamente. (Eu já verifiquei a carga da CPU - tudo correr normal)

Este problema está acontecendo apenas no linux PC. Eu verifiquei-lo no Windows 10 em formato exe e tudo estava funcionando bem! Isso é um pouco estranho.

FireTrade:

Soo, finalmente eu encontrei uma solução para corrigir esse problema!

Basta configurar propriedades do sistema para Java2D em seu método principal estático escrevendo este código:

public static void main(String argsp[]) {
    System.setProperty("sun.java2d.opengl", "true");
    new Game();
}

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=219837&siteId=1
Recomendado
Clasificación