这是一个关于同时制作不同动画的算法/数据结构问题。例如,球在一毫秒内落下一个像素,子弹在一毫秒内移动5个像素,而一个人在20毫秒内移动1个像素。并且认为它们中有数百个在一起。将所有动画组合在一起的最佳方法是什么,移动我们需要在一个函数调用中移动的内容,并删除动画完成的动画?我不想为每个人创建一个线程。我想要做的是创建一个线程移动所有项目并休眠直到需要移动一个对象。
注意:我正在使用Java / Swing,在JPanel中打印对象和图像。
答案 0 :(得分:1)
我最近在Python中做了类似的事情。我不知道这是不是最好的方法,但这就是我所做的。
使用以下公共接口创建一个抽象的Event
类:
tick
- 计算自上次打勾以来经过的时间。执行与该时间跨度成比例的工作。这应该经常被称为创造平稳运动的幻觉;也许每秒十六次左右。isDone
- 当事件发生时返回true。为需要多个帧完成的任何内容创建Event的子类。旋转,缩放,换色等。如果要将图像从屏幕的一个部分移动到另一个部分,可以创建一个事件的TweenEvent
子类。在每个tick
期间,将图像重新绘制在远离原始位置的位置,并进一步朝向目标位置。
您可以同时运行多个事件,如下所示:
Array<Event> events = new Array<Event>();
//add a bunch of TweenEvents here - one for a bullet, one for a ball, etc.
while(True){
Sleep(1/16);
for(Event e in events){
e.tick();
if (e.isDone()){events.remove(e);}
}
}