3

我正在开发一个使用 Java、swing 和 Java2D 生成迷宫的项目。我对Java2D相当陌生,所以如果这个问题很新,请原谅。

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

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

谢谢!

4

2 回答 2

3

将迷宫绘制到 BufferedImage。然后在您的paintComponent() 方法中仅绘制BufferedImage。Swing 将决定是否需要重新粉刷整个迷宫或部分迷宫。

有关在 BufferedImage 上绘画的DrawOnImage示例,请参阅自定义绘画方法中的示例。

于 2013-05-30T00:07:42.613 回答
0

如果迷宫永远不会改变,您可以最初将其绘制到BufferedImage中。paintComponent您可以通过创建 BufferedImage 并调用image.createGraphics()它来获取Graphics2D对象来使用您编写的相同代码进行覆盖。Graphics2D您对返回的对象所做的任何绘画都会createGraphics()添加到BufferedImage. 您可能必须将先前的绘图代码提取到迷宫中,然后将其提取到它自己的函数中,该函数接受一个Graphics2D对象并绘制到它。

将迷宫绘制到 中后BufferedImage,您可以使用或中的任何drawImage()功能。这避免了重新绘制迷宫:现在您只是在绘制已经渲染的图像。GraphicsGraphics2D

于 2013-05-30T00:08:07.220 回答