我在JFrame中有一个AWT画布(我知道Swing和AWT不应同时使用,但在Windows上它很好用,所以我不认为问题是由此引起的),并且使用Canvas的BufferStrategy来绘制屏幕。它在Windows上运行得很流畅,但当我尝试在Ubuntu 12.04上运行时,它变得无法忍受地慢。不仅是渲染,而且JFrame也没有响应。当我注释掉双缓冲和渲染部分时,它又变得流畅了。我有一张ATI显卡,它已经不再受支持,所以我正在使用开源视频驱动程序,但当我运行另一个使用OpenGL的程序时,它不像Swing/AWT那样慢。这是为什么呢?
主要渲染:
主要渲染:
...
private void render()
{
bs = gamePanel.getBufferStrategy();
Graphics g = bs.getDrawGraphics();
currentState.render(g);
g.dispose();
bs.show();
}
...
我在currentstate.render()方法中仅绘制一个填充屏幕的黑色矩形。
编辑:好的,我找到了真正的问题,是我的游戏循环。我在新的线程中使用while循环更新和渲染(上面提供了渲染代码)。如果我使用Canvas的paint()方法,则可以平稳运行,但是我无法控制帧速率。为什么while循环会减慢我的程序?
游戏循环如下:
while(running)
{
update();
render();
}
AnimationTest
。 - trashgodJPanel
默认情况下是双缓冲的。 - trashgod