1

我们都知道 BufferStrategy 的作用以及它是如何工作的,但有一件事让我摸不着头脑,我认为答案就在那里,但我无法确定。

我的课叫A. A extends Canvasimplements 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然后再绘制?

4

0 回答 0