这是一个关于同时制作不同动画的算法/数据结构问题。例如,一个球在一毫秒内下落一个像素,一颗子弹在一毫秒内移动 5 个像素,一个人在 20 毫秒内移动 1 个像素。并认为它们有数百个。将所有动画放在一起的最佳方式是什么,在一个函数调用中移动我们需要移动的内容,并删除动画完成的那些?我不想为每个人创建一个线程。我想要做的是创建一个线程来移动所有项目并休眠,直到需要移动一个对象。
注意:我正在使用 Java/Swing,在 JPanel 中打印对象和图像。
我最近在 Python 中做了类似的事情。我不知道这是否是最好的方法,但这就是我所做的。
Event
使用以下公共接口创建一个抽象类:
tick
- 计算自上次滴答以来经过了多少时间。执行与该时间跨度成比例的工作。应该经常调用它以产生平滑运动的错觉;大概每秒 16 次左右。isDone
- 当事件完成发生时返回真。为任何需要超过一帧才能完成的事情创建一个 Event 的子类。旋转、缩放、颜色变化等。TweenEvent
如果您想将图像从屏幕的一个部分移动到另一个部分,您可以创建 Event 的子类。在每个 期间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);}
}
}