问题:
我一直在用 Java 创建一个 Snake 游戏,一切都很顺利。我遇到的唯一问题是显示分数。蛇每“吃掉”一个苹果,分数就会增加 10。它不会显示当前分数,而是简单地覆盖当前分数,而不是实际擦除它。当我尝试在重新显示之前擦除内容时,我收到一个错误,除了背景颜色之外什么都没有出现。
我有其他图形组件,包括我不想受到影响的paint()。
我的尝试(理论上):
我使用调用drawString("Current score: " + currScore, 0, (Constants.TOTAL_HEIGHT + 15));的 Graphics 对象显示分数。
我想我必须调用一个 clearRect() 方法,这对我来说很有意义。不幸的是,我在指定 clearRect() 的行上得到了 NullPointerException。
我不使用 Graphics2D 只是为了先熟悉 Graphics。如果解决此问题涉及 Graphics2D,我使用它没有问题。
我的尝试(有问题的方法):
public void displayScore(Graphics g) {
//clearScore.clearRect(0, getY(), getWidth(), getHeight());
//g.clearRect(0, getY(), getWidth(), getHeight());
g.drawString("Current score: " + currHighScore, 0, (Constants.TOTAL_HEIGHT + 15));
}
在代码中,clearScore 是在任何方法之外的类中声明的 Graphics 对象。我使用它的原因是为了避免影响其他图形。我尝试了每条 clearRect() 行,并且都产生了相同的 NullPointerException,这就是我将它们注释掉的原因。(Constants.TOTAL_HEIGHT + 15) 负责分配 Y 坐标。
错误信息:
Exception in thread "Thread-3" java.lang.NullPointerException
at com.nmw.view.CanvasFrame.displayScore(CanvasFrame.java:149)
at com.nmw.view.CanvasFrame.drawAll(CanvasFrame.java:43)
at com.nmw.view.CanvasFrame.run(CanvasFrame.java:64)
at java.lang.Thread.run(Thread.java:722)
drawAll 是我调用所有采用 Graphics 的方法来绘制游戏片段的地方。
为冗长的问题道歉=/