在最初几次执行后,定时器被偏移

时间:2015-11-17 20:16:33

标签: java

我使用带有以下代码的计时器

    if (System.currentTimeMillis () - timer > 100) { 
        timer += 100; 
        draw = !draw; 
    }
    if (draw) { 
        drawTexture (1, 15, getX() + 10, getY() + 5); 
    }

对于前几次执行,纹理以一致的速率绘制。每次执行都会延长时间。但是被打印的内容并没有改变?

渲染方法(每个循环)

public void render (double delta) {
        glDisable(GL_TEXTURE_2D);
        glViewport (0, 0, Engi.config.width, Engi.config.height);
        glMatrixMode (GL_PROJECTION);
        glLoadIdentity ();
        glOrtho (0.0, Engi.config.width, Engi.config.height, 0.0, -1.0, 1.0);
        glMatrixMode (GL_MODELVIEW);
        glLoadIdentity ();
        glEnable(GL_BLEND);
        glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        glMatrixMode (GL_MODELVIEW);
        glEnable (GL_TEXTURE_2D);
        glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glClearColor (0.0f, 0.0f, 0.0f, 0.0f);
        glLoadIdentity ();

        if (System.currentTimeMillis () - timer > 100) { 
            timer += 100; 
            draw = !draw; 
        }
        if (draw) { 
            drawTexture (1, 15, getX() + 10, getY() + 5); 
        }

        glfwSwapBuffers (Engi.config.windowID);
    }

1 个答案:

答案 0 :(得分:0)

不确定此代码的运行频率。 System.currentTimeMillis()返回的值仅在系统时钟节拍间隔更新,对于Windows通常为15ms。因此,如果您在紧密循环中调用它,则定时器以非常快的速率增加,其中currentTimeMillis()仅每15毫秒更新一次。也许您只想延迟(Thread.sleep(long)),然后确定是否绘制。