然而,不知何故,这样做甚至更慢了。现在需要约98毫秒才能重新绘制。为什么会这样呢?
请注意,我知道像LWGL和JOGL这样的库,但是我不想为这样一个图形简单的游戏使用完整的OpenGL封装。
A small game I've created can be found here
long renderStart = System.nanoTime()
// render stuff here
long renderTime = (System.nanoTime() - renderStart) / 1000000;
GameEngine
的类。这里的目的是什么? - Martijn Courteaux //create a graphics backplane
if(backplane == null || !backplaneSize.equals(this.getSize())){
backplane = this.createImage((int)this.getSize().getWidth(), (int)this.getSize().getHeight());
backplaneSize = this.getSize();
}
因此,只有在组件是新的或调整大小时才会创建背板。这对速度有巨大影响。
自JDK 1.0以来,我一直在使用Java进行图形编程。实际上,我从未听说过BufferStrategy这个东西。嘿。
我从未遇到过使用基本Java图形调用获得良好帧速率的问题。另一个要注意的事项是确保Swing不会尝试为您清除组件的背景。那也可能是减速的另一个来源。
我同意Nicolas的观点,对于图形/交互处理来说非常棒。
我无法确定你在做什么。你的问题涉及Swing,但你提到了Canvas和Bufferstrategy。在Swing中,你应该使用JPanel,它自动双缓冲,所以你不必担心这个。
我测试了一个简单的动画,有1000个移动的球。计时器设置为每100毫秒触发一次。当计时器触发时,1000个球会随机移动到新位置,并创建一个新的BufferedImage,然后重新绘制显示图像的面板。重新绘制之间的时间差为110ms,意味着只需要10ms来创建新的BufferedImage并进行绘制。绘制是在全屏幕上完成的,因此没有剪辑。
这个posting展示了我测试的示例代码。