当我使用g.drawString时,在java中出现白屏

时间:2017-03-17 12:17:58

标签: java user-interface graphics awt

所以我应该制作一款在HUD中有分数的游戏,但无论何时我使用该代码

g.drawString("Score: " + score, 15, 64);
//score is a variable

它看起来像这样的白色屏幕

enter image description here

HUD的完整代码就像这样

import java.awt.Color;
import java.awt.Graphics;

public class HUD {

public static int HEALTH = 800;

private static int gvalue = 255;

public int score = 0;
public int level = 1;

   public void tick(){
         HEALTH = MainGame.clamp(HEALTH, 0, 800);

         gvalue = MainGame.clamp(gvalue, 0, 255);
         gvalue = HEALTH/4;

         score++;
   }

public void render(Graphics g){
       g.setColor(Color.gray);
       g.fillRect(15, 15, 200, 30);
       g.setColor(new Color(70, gvalue, 0));
       g.fillRect(15, 15, (HEALTH / 4) , 30);
       g.setColor(Color.white);
       g.drawRect(15, 15, 100 * 2, 30);

       g.drawString("Score: " + score, 15, 64);
       //the line above though, when i remove it, it completely works
   }

  public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }

    public int getLevel() {
        return level;
    }

    public void setLevel(int level) {
        this.level = level;
    }
    } 

P.S我有物体,窗户,颜色等,但它们在其他类中。 P.P.S当我删除上述行时,它工作正常。

2 个答案:

答案 0 :(得分:2)

我没有看到任何声明字体或字体颜色的内容......

g.setColor(Color.black);
Font font = new Font("Times New Roman", Font.BOLD, (int) Math.round(20 * scaleX));
g.setFont(font);
g.drawString("Score: " + score, 15, 64);

我希望这会有所帮助。

答案 1 :(得分:1)

我知道这已经快 4 岁了,但我在 youtube 上遵循相同的教程并遇到了同样的问题。我也找到了一个解决方案,所以在这里发布以防其他人偶然发现这个线程:

这是在我的情况下解决的问题: 在 Game 类(您有游戏循环和渲染 / 滴答方法的地方)中,查看渲染方法。 就我而言,我必须将 createBufferStrategy() 中的数字从 2 更改为 3。 所以这段代码现在可以工作了:

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

我现在可以在HUD类中成功g.drawString