0

我不是在谈论底部功能。只是一个运行到 X 点的动画会停止一段时间并继续。我问这个的原因是因为我必须制作一个程序动画,其中 UFO 飞过建筑物,停在建筑物上,用光束使其消失,然后继续前进。这是我所拥有的:

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);

那个时候让建筑物消失,然后让动画随着不明飞行物离开屏幕继续。

4

1 回答 1

0

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

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

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

只需通过循环所需数量的帧来完成悬停,也许来回轻推 UFO 的位置​​。

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

(该object.getX()调用假定您使用的是斯坦福图形包。)

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

使用 IDE 和调试器,例如 IntelliJ Idea。这将有很大帮助,例如它可以单步执行程序,因此可以查看每个步骤实际执行的操作,这可能与您的期望不符。

于 2015-11-07T21:34:29.650 回答