【问题标题】:Java 2D Game - Drawing fps on screenJava 2D 游戏 - 在屏幕上绘制 fps
【发布时间】:2015-06-28 11:37:13
【问题描述】:

我想在 Canvas 上绘制当前的 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,但会闪烁,因此您只能看到瞬间的值

【问题讨论】:

  • 你的问题是什么?
  • 您的页面在 fps 和渲染输出之间翻转。一步将所有内容呈现到同一页面
  • 这行得通,但为了能够做到这一点,我必须在不传入所需参数的情况下调用函数

标签: java awt frame-rate


【解决方案1】:

我更喜欢使用 Swing,因为它更容易解决您的问题。你只需要使用setDoubleBuffered(true),见:http://docs.oracle.com/javase/7/docs/api/javax/swing/JComponent.html

如果你想坚持使用 AWT,你需要重写 update 方法来实现双缓冲,见: http://www.codeproject.com/Articles/2136/Double-buffer-in-standard-Java-AWT

【讨论】:

  • BufferStrategy 提供双缓冲和主动渲染控制,而 Swing 提供双缓冲和被动渲染控制。
猜你喜欢
  • 2018-01-07
  • 2015-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多