实现动画的常用方法是什么(例如,在SWT中具有位置变化的复合体),以便它们在所有机器上看起来同样快速?
天真的方法是使用时间戳,停止直到下一个动画步骤的时间。
有更专业的方式吗?
唯一的方法是使用时间戳;天真和专业的方法在使用方式上有所不同。
天真的方法使用线程和Thread.sleep()
。专业方法使用定时器以特定间隔运行代码,并让定时器决定如何处理延迟和抖动。
您可以了解更多关于计时器的信息,查看课程Timer
和TimerTask
。 java.util.Timer.scheduleAtFixedRate(TimerTask, Date, long)
应该是一个好的开始。请注意,代码是在新线程中执行的,因此您需要使用常用工具将事件注入UI线程的队列中。
我定期使用javax.swing.Timer
,它适用于一致的动画。你所要做的就是实现一个实现Frame
的类(你甚至可以使它成为你的Panel
或ActionListener
)。
计时器以构造函数中指定的间隔调用actionPreformed(...)
方法(如果需要,可以稍后调用),并且可以从Timer
间隔执行所有重绘。通常这涉及更新所需对象的状态,并在所涉及的repaint()
上调用Panel
。
请务必调用Timer
的start()
方法。这让我头疼不已!