多屏幕上的VolatileImage JFrame

时间:2011-08-28 11:02:34

标签: java swing graphics awt graphics2d

我有一个JFrame,我使用Graphics2D使用this教程绘制VolatileImage。我主要复制代码以查看它是如何工作的,但是为我的游戏稍微编辑了它。我正在用两个屏幕运行我的电脑。

当我将游戏的窗口拖到窗口最初没有出现的另一个屏幕上时,会出现问题。窗口变灰,屏幕上没有显示图形,甚至是我用Graphics2D绘制的简单矩形。这只发生在我调用volatileimage的draw方法时,如教程所示。

我相信这可能与此有关......

GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration();

......但我不确定。

非常感谢任何帮助。知道VolatileImage是否应该是我的游戏方式,或者BufferedImage或其他什么是更好的性能和帧速率方法,这也很有趣。

1 个答案:

答案 0 :(得分:4)

是的,你是对的。 VolatileImage是特定于设备的。从"The VolatileImage API User Guide"开始,您可以阅读:

  

VolatileImage是特定于设备的:如果您创建了一个VolatileImage   GraphicsDevice,您可能无法将该VolatileImage复制到另一个   GraphicsDevice的。因此,您需要在尝试复制之前调用validate   的VolatileImage。

  

如果代码为IMAGE_INCOMPATIBLE,则VolatileImage不是   与当前GraphicsConfiguration兼容。这个   如果使用一个图像创建图像,则可能会出现不兼容问题   GraphicsConfiguration然后被吸引到另一个。 例如,   在多监视器情况下,VolatileImage存在   与特定GraphicsConfiguration相关联。复制那个   图像到不同的GraphicsConfiguration可能会导致   不可预知的结果。要解决此问题,您需要创建一个   与当前兼容的新VolatileImage   GraphicsConfiguration

将帧拖动到另一个屏幕设备时,您需要检查自己的VolatileImage.validate(gc)方法的结果,然后将图像重新创建到新设备。请注意,在某些情况下,您无法创建VolatileImage,在这种情况下,您需要依赖Image之类的其他BufferedImage实施。