2

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

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

  • 我们实际上并不绘制函数调用;我们只是更新状态——所以看起来计时器动作用于“模拟”
  • 我们提出重绘请求
  • Swing 在方便时重新绘制它的请求

这对我来说似乎有些奇怪,因为:

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

问题:我是否误读了示例代码,或者这是用 Java 制作动画的“正确”方式?

谢谢!

4

3 回答 3

5

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

Java/Swing 在这方面很正常。

原因:

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

在“动画”的情况下,JavaFX 比 Java 好得多,因为它主要是为此目的而构建的

于 2012-05-11T06:11:35.960 回答
0

您可能想尝试三叉戟。它是一个干净简单的动画库,没有很多花里胡哨,如果您尝试在 Swing 中制作动画,它会让您的生活变得更轻松。

于 2012-05-12T10:51:48.657 回答