多屏幕上的VolatileImage JFrame

问题描述 投票:4回答:1

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

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

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

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

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

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

java swing graphics awt graphics2d
1个回答
4
投票

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

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

如果代码是IMAGE_INCOMPATIBLE那么VolatileImage与当前的GraphicsConfiguration不兼容。如果图像是使用一个GraphicsConfiguration创建然后绘制到另一个中,则会发生这种不兼容性。例如,在多监视器情况下,存在的VolatileImage与特定的GraphicsConfiguration相关联。将该图像复制到不同的GraphicsConfiguration可能会导致不可预测的结果。要解决此问题,您需要创建一个与当前VolatileImage兼容的新GraphicsConfiguration

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

© www.soinside.com 2019 - 2024. All rights reserved.