文档

Java™ 教程-Java Tutorials 中文版
BufferStrategy 和 BufferCapabilities
Trail: Bonus
Lesson: Full-Screen Exclusive Mode API

BufferStrategy 和 BufferCapabilities

BufferStrategy

在 Java 2 Standard Edition 中,你不必担心视频指针或视频内存,以便充分利用双缓冲或页面翻转。添加了新类 java.awt.image.BufferStrategy 是为了便于以一般方式处理绘制到表面和组件,无论使用的缓冲区数量或用于显示它们的技术如何。

缓冲策略为你提供了两种通用的绘图方法:getDrawGraphicsshow。当你想要开始绘图时,获取绘制图形并使用它。当你完成绘图并希望向屏幕显示你的信息时,请调用 show。这两种方法旨在相当优雅地适应渲染循环:

BufferStrategy myStrategy;

while (!done) {
    Graphics g = myStrategy.getDrawGraphics();
    render(g);
    g.dispose();
    myStrategy.show();
}

还设置了缓冲策略来帮助你监控 VolatileImage 问题。在全屏独占模式下,VolatileImage 问题尤为重要,因为窗口系统有时可以收回它给你的视频内存。一个重要的例子是当用户在 Windows 中按下 ALT+TAB 组合键时 - 突然你的全屏程序在后台运行,你的视频内存丢失了。你可以调用 contentsLost 方法来查明是否发生了这种情况。同样,当窗口系统将内存返回给你时,你可以找到使用 contentsRestored 方法。

BufferCapabilities

如前所述,不同的操作系统,甚至同一操作系统上的不同显卡,可以使用不同的技术。这些 capabilities (功能) 为你公开,以便你可以为你的应用选择最佳技术。

java.awt.BufferCapabilities 封装了这些功能。每个缓冲区策略都由其缓冲区功能控制,因此为你的应用选择正确的缓冲区非常重要。要找出可用的功能,请从图形设备上可用的 GraphicsConfiguration 对象调用 getBufferCapabilities 方法。

Java 2 Standard Edition 1.4 版中提供的功能包括:

要为组件创建缓冲区策略,请调用 createBufferStrategy 方法,提供所需的缓冲区数(此数字包括主表面)。如果需要任何特定的缓冲技术,请提供适当的 BufferCapabilities 对象。请注意,当你使用此版本的方法时,如果你的选择不可用,则必须捕获 AWTException。另请注意,这些方法仅适用于 CanvasWindow

一旦为组件创建了特定的缓冲区策略,就可以使用 getBufferStrategy 方法对其进行操作。请注意,此方法也仅适用于画布和窗口。

编程提示

关于使用缓冲功能和缓冲策略的一些提示:


Previous page: Double Buffering and Page Flipping
Next page: Examples