Java 2D游戏-在屏幕上绘制fps

Java 2D游戏-在屏幕上绘制fps,java,awt,frame-rate,Java,Awt,Frame Rate,我想在画布上绘制当前的FPS if(System.currentTimeMillis() - lastTimer >= 1000) { lastTimer += 1000; System.out.println(ticks+" ticks, "+frames+" fps"); fps(null, frames); frames = 0; ticks = 0; } public void fps(int frames) { BufferStr

我想在画布上绘制当前的FPS

if(System.currentTimeMillis() - lastTimer >= 1000) {
    lastTimer += 1000;
    System.out.println(ticks+" ticks, "+frames+" fps");
    fps(null, frames);
    frames = 0;
    ticks = 0;
}

public void fps(int frames) {
    BufferStrategy bs = getBufferStrategy();
    if(bs == null) {
        createBufferStrategy(3);
        return;
    }

    Graphics g = bs.getDrawGraphics();

    String strFrames = Integer.toString(frames);
    g.setColor(new Color(128, 128, 128));
    g.setFont(new Font("Arial", Font.PLAIN, 13));
    g.drawString(strFrames, 20, 20);
    bs.show();

}
^^^ 这就是我尝试过的,我不知道是否有什么好处。我刚开始尝试用Java制作游戏

public void render() {
    BufferStrategy bs2 = getBufferStrategy();
    if(bs2 == null) {
        createBufferStrategy(3);
        return;
    }

    Graphics g = bs2.getDrawGraphics();

    g.drawImage(image, 0, 0, getWidth(), getHeight(), null);

    g.dispose();
    bs2.show();

}
^^^我也有这个方法,也许必须从那里开始,我不知道


目前它确实显示FPS,但会闪烁,因此您只能看到一瞬间的值。我更喜欢使用Swing,因为它更容易解决您的问题。您只需使用setDoubleBufferedtrue,请参阅:

如果要坚持使用AWT,需要重写update方法以实现doublebuffer,请参阅:

您的问题是什么?页面在fps和渲染输出之间翻转。在一个步骤中将所有内容呈现到同一页面这是可行的,但为了实现这一点,我必须在不传入所需参数的情况下调用函数BufferStrategy提供了双缓冲和主动呈现控制,而as Swing提供了双缓冲和被动呈现控制。