首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java游戏--重新绘制特定的drawString()方法

Java游戏--重新绘制特定的drawString()方法
EN

Stack Overflow用户
提问于 2013-11-15 04:14:39
回答 1查看 322关注 0票数 1

问题:

我一直在用Java创建一个蛇游戏,一切都很顺利。我唯一的问题就是显示分数。每当蛇“吃”一个苹果时,它的分数就会增加10分,而不是显示当前的分数,它只是简单地写在当前的分数上,而实际上并没有抹去它。当我试图删除内容之前,重新显示,我得到一个错误,什么也没有出现,除了我的背景颜色。

我还有其他Graphics组件,包括一个我不希望受影响的have ()。

我的尝试(理论):

我使用调用的Graphics对象显示分数

代码语言:javascript
运行
复制
  drawString("Current score: " + currScore, 0, (Constants.TOTAL\_HEIGHT + 15)); 

我想我必须调用一个clearRect()方法,这对我来说是有意义的。不幸的是,我在指定clearRect()的行中得到了一个clearRect。

我使用Graphics2D不是为了首先熟悉图形。如果解决这个问题涉及到Graphics2D,我没有问题使用它。

我的尝试(有问题的方法):

代码语言:javascript
运行
复制
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坐标.

错误消息:

代码语言:javascript
运行
复制
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是我所有使用图形绘制游戏片段的方法的地方。

为冗长的问题道歉=/

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-11-15 04:16:23

您的问题是,您可能试图使用null Graphics对象进行绘图。如果您没有在paint(...)方法中绘图,如果AWT或paintComponent(...) (如果Swing ),则通常会发生这种情况。解决办法,

  • 在这两种方法中进行绘制(取决于所使用的库)。
  • 总是在你的绘画方法中调用超级的方法。
  • 或者使用标签(AWT)或JLabel (Swing)来显示数据。

坦率地说,如果这是一个AWT项目,如果您不想使用标签,那么您的声明:"I have other Graphics components, including a paint() that I do NOT want affected." --是一个不切实际的要求。

这一声明是:

在代码中,clearScore是在任何方法之外的类中声明的Graphics对象。我使用它的原因是为了避免影响其他图形。

不是你该怎么画画,永远。你现在就知道原因了。如果您碰巧在程序运行期间获得了Graphics上下文,使用它将Graphics分配给您的类字段,然后尝试使用这个类字段,您通常会像看到的那样得到NPE,因为这样获得的Graphics对象不会持久。

如果您需要更深入的帮助,请张贴您的实际分配要求和更多的代码.特别是你的绘图方法。最好是创建并发布一个斯考斯

编辑

你在评论中说:

我的蛇游戏是一个独立的项目,我一直在做,以了解更多的图形。我只使用AWT库,但是,我将尝试使用标签。谢谢你对我为什么得到NullPointerException的回应和解释

如果这是为你自己的项目而不是学校作业,那么我认为你会想要避免使用AWT,而不是使用Swing。它比AWT更强大、更灵活。现在没有理由想要使用AWT了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19993421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档