我正在学习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)
但显然不起作用。我想知道为什么以及如何以及究竟发生了什么。
提前谢谢。
答案 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