JPanel重绘不起作用

JPanel repaint does not work

我正在 java 使用 swing 和 awt 库开发一个图形项目。我正在寻找一种可以让我在 JPanel 上快速绘制的方法。我尝试了各种方法:覆盖 paintComponent,调用 repaint(x, y, width, heigth).. 但在所有情况下我都必须重新绘制所有屏幕!我有一个背景和它前面的一个小图像,每隔几次就会改变一次。我正在寻找一种只允许我在屏幕上绘制小图像的方法,我也不需要重新绘制背景,因为它总是一样的,而且小图像总是处于相同的坐标。例如在 C++ 中,我绘制了背景,然后我只使用 putimage (graphics.h) 绘制了它前面的小图像,所以它非常非常快。有人有什么建议吗?

提示:

  • 将静态图像绘制到 BufferedImage,然后使用 Graphics#drawImage(...)
  • 在 paintComponent 中绘制它
  • 你知道 repaint(...) 方法被重载了,并且一个重载可以接受一个 Rectangle 参数,限制重绘的区域。

我有一些游戏编程经验,通常使用 JPanel 作为 canvas。现在要在其上绘画,您需要编写一个简单的循环,不断缓冲图像,然后将其绘制到屏幕上。因此,在初始化时,您创建了一个 Graphics 或 Graphics2D 对象,该对象被传递给 buffer() 方法。在使用图形实例绘制 BufferedImage 之后,一些 paint() 方法将 BufferedImage 绘制到屏幕上。

只绘制一次背景时,之前绘制的图像仍然可见。如果你所有的图片大小都一样,你就不必费心了,但我仍然建议你也重新粉刷你的背景。

看看Killer Game Programming In Java这本书以获得更多信息,这是一个很好的参考。