为顺序执行分组动画

我有一个使用Swing Timers执行2D动画的Swing程序。 每次按下按钮,都会创建几个定时器来为几个不同的组件设置动画 – 其中一些是从屏幕上移开而其他组件继续前进。 (我不知道每次点击按钮需要执行什么动画,但是在运行时区分动画的两种“类型”并不是一个问题 – 它们是从不同的方法启动的,因此很容易想象一下将它们添加到两个不同的“队列” – 传出项目的队列和传入项目的队列。这样做之后,我可以实现调用一个的基本策略

这就是说 – 所有这一切对我来说都是直觉,启发式的 – 我还没弄清楚如何在实践中实现它。 那些“队列”实际上是什么,以及什么类会保留并稍后执行它们? 大概是一个实现Runnable,创建第二个线程,可以执行动画,更严格地控​​制它们如何进行? 或者事件派发线程在这里给我足够的控制:有没有办法使用SwingUtilities.invokeAndWait() (或类似的东西)来收集要执行的所有动画,同时为某个类的那些分配优先级,或以某种方式标记?

我建议看看一些现有动画引擎的设计,如:

  • 时间框架
  • 三叉戟
  • 使用Tween引擎的Universal Tween Engine和AurelienRibon / sliding-layout 。

通常,这些引擎倾向于做的是具有以规则间隔打勾的中央“时钟”。 然后,他们提供回调function,通知感兴趣的各方已发生“勾号”。

然后,他们在此概念之上提供一系列图层,以便更容易与之交互,例如为动画提供时间范围,以百分比表示(而不是物理时间测量),可用于计算变化的分数。

还提供插值,允许您通过时间周期影响动画的速度(例如慢速,快速输出效果)。

这种方法减少了必须运行多个Timer的开销,这可能会降低性能,同时提供分离模型,因此每个“动画”都是它自己的实体。

就个人而言,我会对每一个进行评估,看看哪个最能满足您的需求并与之共存,但如果您真的想亲自去做,它们为想法和设计提供了一个良好的起点