2014-01-24 43 views
0

我有一个Swing程序,它使用Swing定时器执行2D动画。每按一下按钮,就会创建几个定时器,为几个不同的组件创建动画 - 其中一些定时器离开屏幕,另一些则移动。 (我不会提前知道每个按钮点击时需要执行哪些动画,但是在运行时区分动画的两种“类型”并不是问题 - 它们是从不同的方法启动的,因此它很容易想象将它们添加到两个不同的“队列” - 一个传出项目队列和一个传入项目队列。完成后,我可以实现调用为顺序执行分组动画

的基本策略。我直觉地启发式地思考 - 我还没有想到如何在实践中实现它,实际上这些“队列”是什么,以及什么类会保存并稍后执行它们?可能是实现Runnable的一个,创建第​​二个线程可以通过更严格的控制来执行动画如何继续?还是事件派发线程给我充分的控制:有没有办法使用SwingUtilities.invokeAndWait()(或类似的东西)收集所有要执行的动画,同时将某个类的优先级分配给某个类,或者以某种方式标记该优先级?

回答

5

我建议考虑看看现有的一些动画引擎喜欢的设计:

一般来说,这些引擎倾向于做的是有一个中央“时钟”,它定期滴答滴答。然后他们提供回调功能以通知感兴趣的各方已发生“滴答”。

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

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

该方法降低了必须运行多个Timer的开销,这可能会随着时间的推移而降低性能,同时提供分离模型,因此每个“动画”都是它自己的实体。个人而言,我会评估每一个,看看哪个最符合您的需求并且运行,但是如果您真的想自己做,它们为想法和设计提供了一个很好的起点