2012-05-11 46 views
2

我想用Java做动画制作。我看过:http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html“Java”动画制作方法

我很惊讶的是,在定时器动作的处理程序:

  • 我们不实际绘制函数调用;我们刚刚更新状态 - 因此它出现在定时器动作是用于“模拟”
  • 我们做了重画请求
  • 摆在其方便

这似乎有点怪我,因为重绘其请求:

  • 秋千可以整理多个重绘请求到一个
  • 如果我在定时器计数FPS,我可以超过计数(因为多个重绘变成一个)

问题:我错在阅读示例代码,或者这是在Java中执行动画的“正确”方法吗?

谢谢!

回答

5

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

Java/Swing在这方面是非常正常的。

原因:

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

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

+1

取决于你正在尝试做什么 - JavaFX 2.0当然不错,但Swing对于简单动画仍然很好。它具有不拉扯额外的依赖性的好处..... – mikera

+0

你的答案更有帮助。我很遗憾只能投票(而不是接受),因为另一方在技术上更好地回答了原来的问题。 – user1383359

+0

@mikera:当然,我必须同意你:) –

0

您可能想尝试Trident。它是一个干净而简单的动画库,没有很多花里胡哨的东西,如果你想在Swing中做动画,那么你的生活就会更容易。