如何制作动画暂停和恢复?

时间:2015-11-04 22:42:26

标签: java animation pause

我不会说底层功能。只是一个运行到X点的动画会停止一段时间并恢复。我问这个的原因是因为我必须制作一个程序的动画,其中不明飞行物飞过建筑物,停在建筑物上,使其消失,然后移动。这就是我所拥有的:

import java.awt.Color;

import acm.program.GraphicsProgram;

public class UFO extends GraphicsProgram {
    public static final int APP_W = 800;
    public static final int APP_H = 600;

    public void init() {
        setSize(APP_W, APP_H);
        setBackground(Color.LIGHT_GRAY);
    }

    public void run() {
        GBuilding Tower = new GBuilding(10, 400, Color.black, 80);
        add(Tower);

        GBuilding Tower2 = new GBuilding(160, 400, Color.CYAN, 80);
        add(Tower2);

        GBuilding Tower3 = new GBuilding(260, 400, Color.RED, 80);
        add(Tower3);

        GBuilding Tower4 = new GBuilding(410, 400, Color.BLUE, 80);
        add(Tower4);

        GBuilding Tower5 = new GBuilding(490, 400, Color.WHITE, 80);
        add(Tower5);

        GBuilding Tower6 = new GBuilding(640, 400, Color.GREEN, 80);
        add(Tower6);

        UFOmodel ufo = new UFOmodel(Color.GREEN, 0, 250);
        add(ufo);

        while (true) {
            ufo.move(10, 0);
            pause(30);

        }

    }
}

显然,这是一个GCompound,它在一个单独的类中构建,而UFO在一个单独的类中。基本上,我不知道如何让UFO移动到X点,然后在那个时候使用时会发出光束闪光

getElementAt(20,20).setVisible(false);

当时让建筑物消失,然后动画继续使用不明飞行物离开屏幕。

1 个答案:

答案 0 :(得分:0)

可视化制作动画的工作,例如构建和显示电影胶片的帧。绘制一个帧,暂停帧间隔以显示它,更新帧,暂停,更新......

现在计划这些帧的绘制步骤。首先是UFO移动的一系列帧,然后可能只是几帧,它只是悬停,然后显示激光束一两帧,然后隐藏激光束和目标建筑物,只是悬停一两帧,然后是UFO继续前进的序列。

到目前为止,您有一个while循环来实现移动的UFO。您需要扩展它以实现更大的计划 - 上面的5个序列。这5个序列中的每一个都将改变一些图形对象并循环适当数量的帧。

只需悬停所需的帧数就可以完成,也可以来回轻推UFO的位置。

将UFO移动到射击位置可以通过循环正确数量的帧来完成,直到累积运动跨越所需距离。虽然您可以预先计算该距离,但如果它循环直到UFO的位置正确,则它更容易且更具适应性(例如适应不同的窗口大小)。例如。 while (ufo.getX() < building.getX())

object.getX()电话会假定您正在使用此Stanford graphics package。)

实现第一个序列并对其进行调试。然后在代码中添加它后面的第二个序列,并对其进行调试。然后添加下一个序列,依此类推。

使用IDE和调试器,例如IntelliJ Idea。这将有很大帮助,例如它可以单步执行程序,这样就可以看到每个步骤实际上做了什么,这可能与您的期望不符。