Java 避免重画整个迷宫的最佳方法?
我正在做一个使用Java、swing和Java2D生成迷宫的项目。我对Java2D相当陌生,所以如果这个问题是新手,请原谅 基本上,我有一个成功生成的迷宫。我希望在一个自定义JPanel上绘制这个迷宫,我已经设置好并正确地覆盖了这个组件。我现在的问题是我现在有能力画迷宫,但每次我重新画它时,它就消失了。我已经解决了这个问题,每次调用repaint()时都让它重新绘制迷宫,但这似乎效率极低。既然迷宫没有改变,我为什么要重画呢 所以我的问题是:有没有办法“缓存”迷宫的绘图,这样我就不必每次都浪费时间重画了?我可以看到每次都会重新绘制,因为超大的迷宫是减速的主要来源Java 避免重画整个迷宫的最佳方法?,java,swing,java-2d,maze,Java,Swing,Java 2d,Maze,我正在做一个使用Java、swing和Java2D生成迷宫的项目。我对Java2D相当陌生,所以如果这个问题是新手,请原谅 基本上,我有一个成功生成的迷宫。我希望在一个自定义JPanel上绘制这个迷宫,我已经设置好并正确地覆盖了这个组件。我现在的问题是我现在有能力画迷宫,但每次我重新画它时,它就消失了。我已经解决了这个问题,每次调用repaint()时都让它重新绘制迷宫,但这似乎效率极低。既然迷宫没有改变,我为什么要重画呢 所以我的问题是:有没有办法“缓存”迷宫的绘图,这样我就不必每次都浪费时间
谢谢大家! 将迷宫绘制到缓冲区图像。然后在paintComponent()方法中,只需绘制BuffereImage。Swing将决定是否需要重新绘制整个迷宫或只是其中的一部分
有关在BuffereImage上绘制的示例,请参见中的
DrawOnImage
示例。如果迷宫从未更改,您可以首先将其绘制到一个图形中。通过创建缓冲区图像并在其上调用image.createGraphics()
以获取Graphics2D
对象,可以使用编写的覆盖paintComponent
的代码。对从createGraphics()
返回的Graphics2D
对象所做的任何绘制都将添加到buffereImage
中。您可能需要将迷宫的先前绘图代码提取到它自己的函数中,该函数接受一个Graphics2D
对象并绘制到它
将迷宫绘制到
BufferedImage
中后,可以使用Graphics
或Graphics2D
中的任何drawImage()
函数。这避免了必须重新绘制迷宫:现在您只需绘制已渲染的图像。如果在paintComponent
中绘制时首先调用super。paintComponent
双缓冲不应提供绘制效果。绘图时没有太多的创建或其他昂贵的操作,paintComponent中没有重新绘制。重新绘制的次数越少,重新绘制(50L)
越好。