0

这是一个关于同时制作不同动画的算法/数据结构问题。例如,一个球在一毫秒内下落一个像素,一颗子弹在一毫秒内移动 5 个像素,一个人在 20 毫秒内移动 1 个像素。并认为它们有数百个。将所有动画放在一起的最佳方式是什么,在一个函数调用中移动我们需要移动的内容,并删除动画完成的那些?我不想为每个人创建一个线程。我想要做的是创建一个线程来移动所有项目并休眠,直到需要移动一个对象。

注意:我正在使用 Java/Swing,在 JPanel 中打印对象和图像。

4

1 回答 1

1

我最近在 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);}
    }
}
于 2012-11-30T21:30:50.417 回答