【发布时间】:2014-05-10 05:47:12
【问题描述】:
我在 JFrame 中有一个 AWT Canvas(我知道 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();
}
【问题讨论】:
-
显卡与 Java Swing Buffer Rates 无关。它的代码(很高兴看到)
-
试试这个
AnimationTest。 -
@BDillan 我添加了一些我认为相关的代码,如果您需要查看更多内容,我也会添加
-
@trashgod AnimationTest 似乎运行得很好,我认为是双缓冲影响了我的程序
-
JPanel默认是双缓冲的。
标签: java linux swing graphics awt