'createBufferStrategy'返回的值会发生什么变化?

时间:2013-07-04 06:59:06

标签: java graphics buffer graphics2d bufferstrategy

我正在学习BufferStrategy,我对BS的创建感到困惑。

我的代码看起来像这样......

public class Game extends Canvas{


    /*code not relevant to this topic..
                                       */



    public void render(){
        BufferStrategy bs = this.getBufferStrategy();
        if(bs == null){
             createBufferStrategy(3);
        }
    }

}
基本上,我的班级'Game'是Canvas的子类。 并且该类得到缓冲策略并将其存储在bs

但是,bs没有“创建”缓冲策略,如果它是null(在这种情况下是),我说“createBufferStrategy(3)”。

当我createBufferStrategy(3)this.createBufferStrategy(3)(这是同一件事)时,我感到很困惑。

createBufferStrategy(3)的值究竟存储在哪里?

它不能存储在bs ..所以当我只告诉我的子类创建一个缓冲策略时,bs如何从null转到实际初始化或保持一个值。我没有看到我如何将bs的状态从null更改为任何...

我试图做bs = createBufferStrategy(3)但显然不起作用。我想知道为什么以及如何以及究竟发生了什么。

提前谢谢。

2 个答案:

答案 0 :(得分:2)

来自JavaDocs

  

public BufferStrategy getBufferStrategy()

     

返回此组件使用的BufferStrategy。这种方法会   如果尚未创建或已经创建BufferStrategy,则返回null   地布置。

默认情况下,Canvas不会创建或使用任何类型的缓冲区策略。在您的代码中,当您致电

BufferStrategy bs = this.getBufferStrategy();
if(bs == null){

您正在检查是否有任何先前的缓冲区策略已创建且处于活动状态(尚未处置),这可确保在调用此方法时,所有尝试都会尝试提供有效的BufferStrategy

当您致电createBufferStrategy(3);时,它会在内部构建BufferStrategy以满足您的要求,并将结果分配回内部实例变量,该变量通过调用getBufferStrategy

返回

您可以尝试将代码更改为更像......

BufferStrategy bs = this.getBufferStrategy();
if(bs == null){
    createBufferStrategy(3);
    bs = this.getBufferStrategy();
}

if (bs == null) {
    // It might not be possible to create a buffer strategy for your hardware,
    // or the component is not attached to a native peer
} else {
    // Start painting :D
}

答案 1 :(得分:1)

您将BufferStrategy bs初始化为该组件BufferStrategy( this .getBufferStrategy)。我不太了解内部工作原理,但我现在和我正在使用它来进行游戏。这主要用于缓冲要显示的图像(即在游戏中),每次你画到屏幕时你都会调用getBufferStrategy,所以bs只是一个参考。你也可以写:

if(this.getBufferStrategy() == null)

所以我所说的是BufferStrategy是在组件中创建的,并且检查它是否为null可能只是为了防止程序启动时出错,因为在你手动创建它之前我认为不存在BufferStrategy