Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
BufferStrategy
在 Java 2 Standard Edition 中,你不必担心视频指针或视频内存,以便充分利用双缓冲或页面翻转。添加了新类 java.awt.image.BufferStrategy 是为了便于以一般方式处理绘制到表面和组件,无论使用的缓冲区数量或用于显示它们的技术如何。
缓冲策略为你提供了两种通用的绘图方法:getDrawGraphics 和 show。当你想要开始绘图时,获取绘制图形并使用它。当你完成绘图并希望向屏幕显示你的信息时,请调用 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 版中提供的功能包括:
isPageFlipping
isFullScreenRequired
isMultiBufferAvailable
getFlipContents
FlipContents.COPIED
FlipContents.BACKGROUND
FlipContents.PRIOR
FlipContents.UNKNOWN
要为组件创建缓冲区策略,请调用 createBufferStrategy 方法,提供所需的缓冲区数(此数字包括主表面)。如果需要任何特定的缓冲技术,请提供适当的 BufferCapabilities 对象。请注意,当你使用此版本的方法时,如果你的选择不可用,则必须捕获 AWTException。另请注意,这些方法仅适用于 Canvas 和 Window。
一旦为组件创建了特定的缓冲区策略,就可以使用 getBufferStrategy 方法对其进行操作。请注意,此方法也仅适用于画布和窗口。
关于使用缓冲功能和缓冲策略的一些提示:
BufferStrategy myStrategy; while (!done) { Graphics g; try { g = myStrategy.getDrawGraphics(); render(g); } finally { g.dispose(); } myStrategy.show(); }