2015-11-04 3 views
0

Я не говорю с нижней функцией. Просто анимация, которая работает до точки 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 со зданием в отдельный класс и НЛО в отдельный класс. В принципе, я понятия не имею, как сделать движение НЛО в точку X, то в то время в этой точке имеет вспышки луча при использовании

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

в то время, чтобы сделать здание исчезает, а затем анимации продолжить с экраном выхода ufo.

+0

Есть ли способ получить текущие x и y из GraphicsProgram? Если да, то после перемещения проверьте x и y, чтобы увидеть, находятся ли НЛО в нужном месте и если да, выполните другие функции. Даже если GraphicsProgram не предоставляет текущие координаты x и y, вы можете отслеживать их в классе UFO и делать то же самое. – blm

ответ

0

Визуализируйте задачу создания анимации, например, построения и отображения кадров фильма. Нарисуйте кадр, сделайте паузу для интервала кадра, чтобы отобразить его, обновите фрейм, приостановите, обновите, ...

Теперь планируйте шаги рисования для этих фреймов. Сначала есть последовательность кадров, в которых движется НЛО, а может быть, несколько кадров, где он только парит, затем показывают лазерный луч для кадра или два, затем спрячьте лазерный луч и целевое здание и просто наведите указатель на кадр или два, затем последовательность, в которой движется НЛО.

До сих пор у вас есть петля while, которая реализует движущийся НЛО. Вам необходимо расширить это, чтобы реализовать более крупный план - 5 последовательностей выше. Каждая из этих 5 последовательностей будет изменять некоторые графические объекты и цикл для подходящего количества кадров.

Просто наведение может выполняться путем зацикливания нужного количества кадров, возможно, подталкивая положение НЛО немного назад и вперед.

Перемещение НЛО в положение стрельбы может быть выполнено путем петли правильного количества кадров до тех пор, пока кумулятивное движение не пройдет на нужное расстояние. Несмотря на то, что вы можете прекомпотировать это расстояние, оно легче и легче адаптируется (например, приспосабливается к разным размерам окон), если оно петли, пока положение НЛО не будет правильным. Например. while (ufo.getX() < building.getX()).

(The object.getX() вызов предполагает, что вы используете этот Stanford graphics package.)

Выполнить первую последовательность и отлаживать его. Затем добавьте вторую последовательность, следующую за ней в коде, и отлаживайте это. Затем добавьте следующую последовательность и так далее.

Используйте IDE и отладчик, такие как IntelliJ Idea. Это очень поможет. он может выполнить однопроходное выполнение программы, чтобы он мог видеть, что делает каждый шаг на самом деле, что может не соответствовать вашему ожиданию.

Смежные вопросы