【发布时间】:2014-05-16 17:54:21
【问题描述】:
我正在尝试使用 JComponent 子类中的以下代码在 Java 中为我的游戏制作动画,但此代码会导致动画中出现滞后和抖动,并且对象看起来像是“分裂”的在屏幕上快速重绘。我该如何解决这个问题?我应该在单独的线程上重新绘制每个项目吗?
public GameScene(){
setDoubleBuffered(true);
run();
}
...
public void run() {
Thread animation = new Thread(new Runnable() {
public void run() {
updateGraphics();
}
});
animation.start();
}
public void updateGraphics() {
while (true) {
repaint();
try {
Thread.sleep(5);
} catch (Exception ex) {
}
}
}
【问题讨论】:
-
请分享最少的可测试代码。
-
@Braj 好吧,我在paintComponent 方法中拥有的只是改变对象位置然后重绘它们的标准代码。没有什么特别的。我觉得我上面贴的代码很脆弱,可能有问题。代码是靠系统来记录时间的,而系统似乎并不能很好地计算 5 毫秒。有没有更好的调用 repaint() 方法的方法?
-
只用 5 毫秒调用 Thread.sleep() 的原因是什么?
-
@Miller 5 毫秒似乎是系统在重新绘制场景之前等待的可接受时间。使用这段时间时,动画看起来很逼真。