为什么这个Java渲染使用嵌套的do-while循环?

时间:2014-07-10 02:04:52

标签: java graphics 2d

我一直在学习如何从教程中用Java制作2D游戏,并且无法弄清楚渲染在do-while循环中使用do-while循环的原因,如下所示:

do {
    do {
        Graphics g = null;
        try {
            g = bs.getDrawGraphics();
            g.clearRect(0, 0, getWidth(), getHeight());
            render(g);
        } finally {
            if (g != null) {
                g.dispose();
            }
        }
    } while (bs.contentsRestored());
    bs.show();
} while (bs.contentsLost());

我理解方法中剩下的东西,我只是无法弄清楚为什么它为contentsLost使用do-while循环,并为insideRestored里面的do-while循环。

2 个答案:

答案 0 :(得分:0)

这似乎直接来自BufferStrategy JavaDocs

基本上,这可以确保最后一次使用getDrawGraphics的尝试产生了可行的输出,因为它们通常由VolatileImage支持,系统可以随时回收它。

阅读BufferStrategy#contentsRestoredBufferStrategy#contentsLostVolatileImageBufferStrategy and BufferCapabilities

如果contentsRestoredtrue,那么您提取到Graphics上下文的内容已被丢弃,需要重新绘制。目的是确保仅通过BufferStrategy#show

将完全实现的图像推送到硬件

如果contentsLosttrue,则支持VolitileImage的{​​{1}}已丢失,需要重新构建并重新显示。

答案 1 :(得分:0)

该代码取自this page中的BufferStrategy作为双缓冲区渲染的示例

文档说:

contentsLost() : Returns whether the drawing buffer was 
                    lost since the last call to getDrawGraphics.
contentsRestored(): Returns whether the drawing 
                    buffer was recently restored from a 
                    lost state and reinitialized to the 
                    default background color (white).

因此,我认为循环是为了确保所有图形工作都丢失,因为内容已恢复。