文档

Java™教程
隐藏目录
被动渲染与主动渲染
路径:奖励
课程:全屏独占模式 API

被动渲染 vs. 主动渲染

如前所述,大多数全屏应用程序在绘制时通常表现得更好。在传统的窗口化GUI应用程序中,绘制的时间通常由操作系统处理。在窗口化环境中,这是完全合理的。窗口应用程序不知道用户何时会移动、调整大小、显示或覆盖另一个窗口中的应用程序,直到实际发生这些情况。在Java GUI应用程序中,操作系统会向AWT发送一个绘制事件,AWT会确定需要绘制什么,创建一个带有适当剪辑区域的java.awt.Graphics对象,然后调用具有该Graphics对象的paint方法:

// 传统GUI应用程序的绘制方法:
// 这个方法可以在任何时间调用,通常
// 是从事件分发线程调用的
public void paint(Graphics g) {
    // 使用g来绘制我的组件
}

这有时被称为被动渲染。可以想象,这样的系统会产生很多开销,这令许多对性能敏感的AWT和Swing程序员感到恼火。

当处于全屏独占模式时,你不再需要担心窗口被调整大小、移动、显示或遮挡(除非你忽略了我关闭调整大小的建议)。相反,应用程序窗口直接绘制到屏幕上(主动渲染)。这简化了绘制的过程,因为你不需要担心绘制事件。实际上,当处于全屏独占模式时,操作系统发送的绘制事件甚至可能在不适当或不可预测的时间传递。

在全屏独占模式下,通常更适合使用渲染循环来完成绘制代码:

public void myRenderingLoop() {
    while (!done) {
        Graphics myGraphics = getPaintGraphics();
        // 使用myGraphics进行适当的绘制
        myGraphics.dispose();
    }
}

这样的渲染循环可以在任何线程中完成,可以是自己的辅助线程,也可以是主应用程序线程的一部分。

编程提示

关于使用主动渲染的一些提示:


上一页:显示模式
下一页:双缓冲和页面翻转