我不会说底层功能。只是一个运行到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);
当时让建筑物消失,然后动画继续使用不明飞行物离开屏幕。
答案 0 :(得分:0)
可视化制作动画的工作,例如构建和显示电影胶片的帧。绘制一个帧,暂停帧间隔以显示它,更新帧,暂停,更新......
现在计划这些帧的绘制步骤。首先是UFO移动的一系列帧,然后可能只是几帧,它只是悬停,然后显示激光束一两帧,然后隐藏激光束和目标建筑物,只是悬停一两帧,然后是UFO继续前进的序列。
到目前为止,您有一个while
循环来实现移动的UFO。您需要扩展它以实现更大的计划 - 上面的5个序列。这5个序列中的每一个都将改变一些图形对象并循环适当数量的帧。
只需悬停所需的帧数就可以完成,也可以来回轻推UFO的位置。
将UFO移动到射击位置可以通过循环正确数量的帧来完成,直到累积运动跨越所需距离。虽然您可以预先计算该距离,但如果它循环直到UFO的位置正确,则它更容易且更具适应性(例如适应不同的窗口大小)。例如。 while (ufo.getX() < building.getX())
。
(object.getX()
电话会假定您正在使用此Stanford graphics package。)
实现第一个序列并对其进行调试。然后在代码中添加它后面的第二个序列,并对其进行调试。然后添加下一个序列,依此类推。
使用IDE和调试器,例如IntelliJ Idea。这将有很大帮助,例如它可以单步执行程序,这样就可以看到每个步骤实际上做了什么,这可能与您的期望不符。