我想用 Java 制作动画。我看过:http://docs.oracle.com/javase/tutorial/uiswing/misc/timer.html
令我惊讶的是,在计时器操作处理程序中:
- 我们并不实际调用绘图函数;我们只是更新状态 - 所以看来计时器操作用于“模拟”
- 我们提出重画请求
- Swing 在方便时重新绘制其请求
这对我来说有点奇怪,因为:
- Swing 可以将多个重绘请求整理为一个
- 如果我在计时器中计算 fps,我可能会过度计数(因为多次重绘变成一次)
问题:我是否误读了示例代码,或者这是用 Java 制作动画的“正确”方法?
谢谢!
最佳答案
单独进行状态更新和渲染是相当正常的。
Java/Swing 在这方面是很正常的。
原因:
- 很多事情都可以更新状态(计时器事件、用户输入等),因此使更改变得非常轻量并将它们与屏幕刷新分离非常有用,以便您可以随时执行这些操作
- 您经常希望屏幕刷新的速度与模型状态更新的速度不同。通常,您需要固定的动画/状态更新间隔,但希望屏幕刷新尽可能快。如果您在动画中进行插值,则尤其如此。
- 渲染通常需要在特定上下文中进行(在本例中为 Swing UI 线程)。您不一定希望限制状态更改仅发生在这种情况下
- 将 View (屏幕呈现)与数据模型分开是一种很好的做法。除了良好的概念设计区别之外,这还允许您独立于显示测试数据模型、在没有 GUI 的服务器上运行模型版本等。
关于java - "Java"做动画的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10546053/