4

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

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

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

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

...但我不确定。

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

4

1 回答 1

3

是的,你是对的。VolatileImage是特定于设备的。从“VolatileImage API 用户指南”中,您可以阅读:

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

如果代码是IMAGE_INCOMPATIBLE,则VolatileImage与当前不兼容GraphicsConfiguration。如果图像是用一个创建的 GraphicsConfiguration,然后绘制到另一个中,则可能会出现这种不兼容性。例如,在多显示器情况下,VolatileImage存在与特定的GraphicsConfiguration. 将该图像复制到另一个图像上GraphicsConfiguration可能会导致不可预知的结果。要更正此问题,您需要创建一个VolatileImage与当前兼容 的新GraphicsConfiguration

将框架拖到另一个屏幕设备时,您需要检查VolatileImage.validate(gc)您的方法的结果并将图像重新创建到新设备。VolatileImage请注意,在某些情况下Image您无法创建BufferedImage.

于 2011-08-28T13:12:28.753 回答