【问题标题】:VolatileImage JFrame on multiple screens多个屏幕上的 VolatileImage JFrame
【发布时间】:2011-11-05 10:32:11
【问题描述】:

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

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

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

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

...但我不确定。

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

【问题讨论】:

    标签: java swing graphics awt graphics2d


    【解决方案1】:

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

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

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

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

    【讨论】:

    • VolatileImage 比 BufferedImage 值得大惊小怪吗? :)
    • @Humphrey:它们的速度要快得多。但在您的情况下,这可能是一个过早的优化,我建议先尝试BufferedImage。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-09
    • 1970-01-01
    • 2011-10-12
    • 1970-01-01
    • 2014-12-06
    • 2013-01-14
    • 2013-10-04
    相关资源
    最近更新 更多