如何修复Java中的动画滞后?

我试图在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) { } } } 

你很模糊地描述你的问题。

原则上,Swing并不是非常适合动画 – 速度不是主要问题 – 而是缺乏控制何时在屏幕上更新图形的可能性。

Swing不会将渲染与屏幕刷新同步。 虽然它确实是双缓冲区(默认情况下),但是在显示屏幕时刷新图形仍然会发生(并且确实如此),在组件框架N的上半部分显示(例如),而框架N + 1在下半部分(因为帧更新发生在屏幕刷新位于屏幕中间某处)。

我所知道的唯一解决方案是切换到全屏模式( http://docs.oracle.com/javase/tutorial/extra/fullscreen/ ),其中渲染可能是光束同步的。 窗口显示没有解决方案(据我所知)。

而不是使用Java Timer尝试使用更适合Swing应用程序的Swing Timer 。

请看看如何使用摆动计时器

以下是示例代码:

 int delay = 1000; //milliseconds ActionListener taskPerformer = new ActionListener() { public void actionPerformed(ActionEvent evt) { //...Perform a task... } }; new Timer(delay, taskPerformer).start(); 

在此处查找示例代码

在此处输入图像描述