我一直在学习如何从教程中用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循环。
答案 0 :(得分:0)
这似乎直接来自BufferStrategy
JavaDocs。
基本上,这可以确保最后一次使用getDrawGraphics
的尝试产生了可行的输出,因为它们通常由VolatileImage
支持,系统可以随时回收它。
阅读BufferStrategy#contentsRestored
,BufferStrategy#contentsLost
,VolatileImage
和BufferStrategy and BufferCapabilities
如果contentsRestored
为true
,那么您提取到Graphics
上下文的内容已被丢弃,需要重新绘制。目的是确保仅通过BufferStrategy#show
如果contentsLost
为true
,则支持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).
因此,我认为循环是为了确保所有图形工作都丢失,因为内容已恢复。