2010-04-21 122 views
5

我正在使用Java和使用的BufferedImages制作游戏以将内容呈现到屏幕上。我在运行游戏的低端机器上遇到了性能问题,所以我转而使用速度更快的VolatileImage。除了他们实际上放慢了整个事情。Java:VolatileImage比BufferedImage更慢

使用GraphicsConfiguration.createCompatibleVolatileImage(...)创建图像,并使用Graphics.drawImage(...)(请参见后面的链接以了解具体哪一个)来绘制图像。它们使用双缓冲在画布上绘制。

有人知道这里出了什么问题吗?

+0

我已经注意到了。 – Hardcoded 2010-04-21 15:15:34

+0

如果你在显卡上的内存不足,它显然不会帮助。 IIRC,'BufferedImage'有一些加速,所以差距可能不如以前那么大。 – 2010-04-21 15:45:20

+0

@Norswap:我真的觉得要找到一个好的答案在于找到一流的开源Java游戏(肯定有一些)或者一些伟大的Java演示(来自“演示场景”),并试图理解什么他们已经完成了。我很久以前就用非常*异乎寻常的硬件(如Amiga,SNES,模式13x等)编写游戏和演示程序,而且我仍然不知道如何在Java中正确“推送像素”。这再次成为Java“过度工程化”并且不必要的复杂的领域。我不会为这里的某个人屏住呼吸而能够真正帮助你。 – SyntaxT3rr0r 2010-04-21 16:20:04

回答

6

很可能你的代码混合了加速和未加速的操作。

这个document是必读的。对于使用加速Java图形的任何人来说,特别是第3.2节至关重要。

+0

缩放(在裁剪的意义上,请参阅问题中的链接)缩放是否可能是一种不加速的操作?由于我使用精灵表,每一次绘制都必须有效地选择图像的一部分以绘制到屏幕上。 – Norswap 2010-04-21 16:08:17