我有一个使用Swing Timers执行2D动画的Swing程序.每次按下按钮,都会创建几个定时器来为几个不同的组件设置动画 - 其中一些组件移出屏幕,其他组件继续前进.(我不知道提前每次点击按钮需要执行什么动画,但是在运行时区分动画的两种"类型"并不是一个问题 - 它们是从不同的方法启动的,因此很容易想象一下将它们添加到两个不同的"队列" - 一个传出项目的队列和一个传入项目的队列.完成后,我可以实现调用一个基本策略
这就是说 - 所有这些对我来说都是直觉,启发式的 - 我还没弄清楚如何在实践中实现它.那些"队列"实际上是什么,以及什么类会持有并稍后执行它们?大概是一个实现Runnable,创建第二个线程,可以执行动画,更严格地控制它们如何进行?或者事件派发线程在这里给我足够的控制:是否有一种方法可以使用 SwingUtilities.invokeAndWait()(或类似的东西)来收集要执行的所有动画,同时为某个类的那些分配优先级,或者标记为某种方式?
我建议看看一些现有的动画引擎的设计,如:
通常,这些引擎倾向于做的是具有以规则间隔打勾的中央"时钟".然后,他们提供回调功能,通知感兴趣的各方已发生"勾号".
然后,他们在此概念之上提供一系列图层,以便更容易与之交互,例如为动画提供时间范围,以百分比形式呈现(而不是物理时间测量),可用于计算变化的分数.
还提供插值,允许您通过时间周期影响动画的速度(例如慢速,快速输出效果).
这种方法减少了必须Timer运行多个s 的开销,这可能会降低性能,同时提供分离模型,因此每个"动画"都是它自己的实体.
就个人而言,我会对每一个进行评估,看看哪个最能满足您的需求并与之共存,但如果您真的想亲自去做,它们为想法和设计提供了一个良好的起点