做"动画"的"Java"方式

use*_*359 2 java animation swing

我想用Java做动画.我看过:http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html

令我惊讶的是,在计时器动作处理程序中:

  • 我们实际上并没有绘制函数调用; 我们只是更新状态 - 所以看起来计时器动作用于"模拟"
  • 我们做一个重绘请求
  • Swing在方便时重新描述了它的请求

这对我来说有点奇怪,因为:

  • Swing可以将多个重绘请求整理为一个
  • 如果我在计时器中计算fps,我可能会超过计数(因为多次重绘成为一个)

问题:我是否错误地阅读了示例代码,或者这是用Java做动画的"正确"方法?

谢谢!

mik*_*era 5

分别进行状态更新和渲染是很正常的.

在这方面,Java/Swing非常正常.

原因:

  • 很多东西可以更新状态(计时器事件,用户输入等),因此更改非常轻量级并将它们与屏幕刷新分离是很有用的,这样您就可以随时进行更改
  • 您经常希望屏幕刷新以与模型状态更新不同的速率运行.通常,您需要一个固定的间隔来进行动画/状态更新,但希望屏幕刷新尽可能快地进行.如果您在动画中进行插值,则尤其如此.
  • 渲染通常需要在特定的上下文中进行(在本例中为Swing UI线程).您不必将状态更改限制为仅在此上下文中发生
  • 将视图(屏幕显示)与数据模型分开是一种很好的做法.除了是一个很好的概念设计区别之外,这允许你做一些事情,比如独立于显示器测试数据模型,在没有GUI等的服务器上运行模型的版本.