避免重绘整个迷宫的最佳方法是什么?

时间:2013-05-30 00:00:06

标签: java swing java-2d maze

我正在开发一个使用Java,swing和Java2D进行迷宫生成的项目。我是Java2D的新手,所以如果这个问题是个新问题,请原谅。

基本上,我有一个成功生成的迷宫。我希望在我设置的自定义JPanel上绘制这个迷宫并正确覆盖PaintComponent。我现在遇到的问题是我现在有能力绘制迷宫,但每次重绘它都会消失。我每次调用repaint()时重写迷宫都解决了这个问题,但这看起来非常低效。由于迷宫没有改变,我为什么要重绘它?

所以我的问题是:有没有办法“缓存”迷宫的绘图,所以我不必每次浪费周期重绘它?我可以看到每次都重绘它,因为特别大的迷宫是减速的主要来源。

谢谢!

2 个答案:

答案 0 :(得分:3)

将迷宫绘制为BufferedImage。然后在paintComponent()方法中绘制BufferedImage。 Swing将确定是否需要重新绘制整个迷宫或部分迷宫。

有关在BufferedImage上绘画的示例,请参阅Custom Painting Approaches中的DrawOnImage示例。

答案 1 :(得分:0)

如果迷宫永不改变,您最初可以将其绘制为BufferedImage。您可以使用您编写的相同代码来覆盖paintComponent,方法是创建BufferedImage并在其上调用image.createGraphics()以获取Graphics2D对象。您对从Graphics2D返回的createGraphics()对象执行的任何绘制都会添加到BufferedImage。您可能必须将之前的绘图代码仅用于迷宫,将其提取到自己的函数中,该函数采用Graphics2D对象并绘制到它。

将迷宫吸引到BufferedImage后,您可以使用drawImage()Graphics中的任意Graphics2D个功能。这样可以避免重绘迷宫:现在您只是绘制已经渲染的图像。