文档

Java™教程
隐藏目录
BufferStrategy和BufferCapabilities
导航:奖励
课程:全屏独占模式 API

BufferStrategy 和 BufferCapabilities

BufferStrategy

在Java 2标准版中,您无需担心视频指针或视频内存,即可充分利用双缓冲或翻页技术。新添加了一个名为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

如前所述,不同的操作系统,甚至是同一操作系统上的不同图形卡,都具有不同的可用技术。这些能力对您进行公开,以便您可以为您的应用程序选择最佳技术。

java.awt.BufferCapabilities封装了这些能力。每个缓冲策略都由其缓冲能力控制,因此为您的应用程序选择正确的能力非常关键。要了解可用的能力,请从您的图形设备上可用的GraphicsConfiguration对象调用getBufferCapabilities方法。

在Java 2标准版1.4中可用的能力有:

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

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

编程技巧

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


上一页: 双缓冲和页面翻转
下一页: 示例