Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的Graphics.drawString()要花这么多时间渲染文本?_Java_Game Development - Fatal编程技术网

Java 为什么我的Graphics.drawString()要花这么多时间渲染文本?

Java 为什么我的Graphics.drawString()要花这么多时间渲染文本?,java,game-development,Java,Game Development,我正在用Java编写我的第一个视频游戏,我已经进入了游戏中希望在HUD中显示分数和级别的部分 对于我的HUD类,我有一个render方法来显示其中的所有元素 public void render(Graphics g) { g.setColor(Color.gray); g.fillRect(15, 15, 200, 32); g.setColor(new Color((int)red, (int)greenVal, 0)); g.fillRect(15, 15,

我正在用Java编写我的第一个视频游戏,我已经进入了游戏中希望在HUD中显示分数和级别的部分

对于我的HUD类,我有一个render方法来显示其中的所有元素

public void render(Graphics g) {
    g.setColor(Color.gray);
    g.fillRect(15, 15, 200, 32);
    g.setColor(new Color((int)red, (int)greenVal, 0));
    g.fillRect(15, 15, (int)HEALTH * 2, 32);
    g.setColor(Color.white);
    g.drawRect(15, 15, 200, 32);

    Graphics2D d2 = (Graphics2D) g;
    d2.drawString("Score: " + score, 280, 30);
    d2.drawString("Level: " + level, 360, 30);

}
我将它投射到一个Graphics2d对象上,看它是否会加速。事实并非如此

我从游戏类及其渲染方法调用HUD渲染方法

public void render() {
    this.requestFocus();
    BufferStrategy bs = this.getBufferStrategy();
    if (bs == null) {
        this.createBufferStrategy(3);
        return;
    }
    Graphics g = bs.getDrawGraphics();

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

    handler.render(g);
    hud.render(g);


    g.dispose();
    bs.show();
}
当我第一次加载游戏时,FPS为1或2,屏幕保持完全白色约3-4秒。然后游戏加载,我的FPS恢复到800或更多。但游戏从一开始就在运行,即使在那个空白屏幕上,游戏也已经开始了。这对球员来说是个问题,因为他们的健康状况可能会下降,他们甚至无法阻止这种情况的发生

如果这里没有足够的信息,我很乐意提供更多的代码。这个游戏本质上就是躲避波浪中的物体

这肯定是drawString()方法。我把画线的线条注释掉,效果很好,把它们放回去,问题仍然存在

我只是想知道是否有一种方法可以更快地解决问题,或者是否有一种方法可以改进我必须解决的问题。谢谢