我有一个JFrame,我使用Graphics2D使用this教程绘制VolatileImage。我主要复制代码以查看它是如何工作的,但是为我的游戏稍微编辑了它。我正在用两个屏幕运行我的电脑。
当我将游戏的窗口拖到窗口最初没有出现的另一个屏幕上时,会出现问题。窗口变灰,屏幕上没有显示图形,甚至是我用Graphics2D绘制的简单矩形。这只发生在我调用volatileimage的draw方法时,如教程所示。
我相信这可能与此有关......
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsConfiguration gc = ge.getDefaultScreenDevice().getDefaultConfiguration();
......但我不确定。
非常感谢任何帮助。知道VolatileImage是否应该是我的游戏方式,或者BufferedImage或其他什么是更好的性能和帧速率方法,这也很有趣。
答案 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
实施。