我们都知道 BufferStrategy 的作用以及它是如何工作的,但有一件事让我摸不着头脑,我认为答案就在那里,但我无法确定。
我的课叫A
. A
extends
Canvas
和implements
Runnable
public void renderGraphics(){
createBufferStrategy(2);
BufferStrategy bs = this.getBufferStrategy();
if(bs == null){
this.createBufferStrategy(2);
return;
}
Graphics g = bs.getDrawGraphics();
g.setColor(Color.RED);
g.fillRect(0, 0, getWidth(), getHeight());
g.dispose();
bs.show();
}
因为我的课程A
扩展了 Canvas,所以我可以调用createBufferStrategy(2)
. 然后将其内容存储到bs
.
该方法的其余部分按预期工作,弹出我的窗口(我没有显示类的所有代码,因为它不相关,它只是一个简单的程序,它创建一个窗口并使用显卡渲染颜色)并且窗口内内容的颜色为红色。如预期。
但是..当我将代码更改为时createBufferStrategy(3)
,缓冲区的数量从 2 设置为 3.. 显示窗口但不显示画布。
要解决这个问题..我必须将代码更改为
public void render(){
//REMOVE the createBufferStrategy(3) method from this line
BufferStrategy bs = this.getBufferStrategy();
if(bs == null){
this.createBufferStrategy(3);
return;
}
Graphics g = bs.getDrawGraphics();
g.setColor(Color.RED);
g.fillRect(0, 0, getWidth(), getHeight());
g.dispose();
bs.show();
}
我的问题是为什么?
我在这里想念什么?
TL;博士
为什么我必须删除createBufferStrategy(3)
并测试是否bs
可以null
使用 3 个缓冲区,但是使用 2 个缓冲区,我可以createBuffer(2)
先将内容存储到bs
然后再绘制?