Java 2D 绘图的最佳性能

2022-09-01 07:26:18

我正在编写Java 2D游戏。我正在使用内置的Java 2D绘图库,在我从JFrame(有时是全屏)的Canvas的BufferStrategy获取的Graphics2D上绘图。缓冲区策略是双缓冲的。通过计时器主动完成重新喷漆。不过,我遇到了一些性能问题,尤其是在Linux上。

Java2D有很多方法来创建图形缓冲区和绘制图形,我只是不知道我是否在做正确的事情。我一直在尝试graphics2d.getDeviceConfiguration().createCompatibleVolatileImage,它看起来很有前途,但我没有真正的证据证明,如果我将绘图代码切换到那个,它会更快。

根据你的经验,在Java 1.5+中将2D图形渲染到屏幕上的最快方法是什么?请注意,游戏遥遥领先,所以我不想切换到完全不同的绘制方法,如OpenGL或游戏引擎。我基本上想知道如何获得使用Graphics2D对象将内容绘制到屏幕上的最快方法。


答案 1

这篇文章的答案,Consty的答案以及我自己的研究的综合:

什么有效:

  • 用于创建与您正在绘制的内容兼容的图像。这是绝对必要的!GraphicsConfiguration.createCompatibleImage
  • 通过 使用双缓冲绘图。Canvas.createBufferStrategy
  • 在可用的情况下使用以加快绘制速度。-Dsun.java2d.opengl=True
  • 避免使用转换进行缩放。相反,缓存要使用的映像的缩放版本。
  • 避免半透明图像!位掩码图像很好,但在Java2D中半透明是非常昂贵的。

在我的测试中,使用这些方法,我的速度提高了10倍 - 15倍,使正确的Java 2D图形成为可能。


答案 2

我认为我遇到了和你一样的问题。在这里查看我的帖子:

Java2D 性能问题

它显示了性能下降的原因以及如何解决它。但是,它并不能保证在所有平台上都能很好地工作。你会在帖子中看到原因。


推荐