[ Введение | Основы | if/else | Циклы | Массивы | Графика | Анимация | Мышь | Клавиатура | Математика | Методы | Текст | Задачи ]


Java для школьников: урок 7

Простая анимация

В цикле “for” нарисуйте фигуру с меняющейся координатой x или y.

Чтобы получился мультик, используйте функцию задержки delay(time). Здесь time — это вещественное число, определяющее время задержки в секундах.

Для стирания предыдущего кадра вызывайте метод clearDrawing().

Вот пример. Представьте, что к Вам катится мячик.

void main() {
    setColor(red);
    for (int count = 0; count < 50; count++) {
        fillCircle(150, count*5, 50);
        delay(0.1);
        clearDrawing();
    }
}

Попробуйте запустить программу без clearDrawing(), закомментировав эту строку. Вот так:

        // clearDrawing();

Как это работает:

  • Устанавливаем цвет рисуемой фигуры.
  • Выполняем цикл 50 раз.
  • Рисуем круг. Координата X (150) остается постоянной, чтобы фигура двигалась вниз, а не вбок. Координату Y будем увеличивать на 5 (count*5)s на каждом цикле.
    • Когда count = 0, получаем y = count * 5 = 0 * 5 = 0, прибавляем 1 к счетчику.
    • Когда count = 1, получаем y = count * 5 = 1 * 5 = 5, прибавляем 1 к счетчику.
    • Когда count = 2, получаем y = count * 5 = 2 * 5 = 10, прибавляем 1 к счетчику.
    • Мы видим, что y каждый раз увеличивается на 5, до count = 49. При этом y будет равно 49 * 5 = 245.
  • delay(0.1) - приостанавливает программу на одну десятую долю секунды.
  • clearDrawing() - стирает окно для отрисовки следующего кадра.

Кадры в секунду

Попробуйте также менять время задержки. Метод delay() приостанавливает программу на время, указанное в качестве параметра. Время задается как вещественное значение double, а не целое int. Это позволяет делать задержку в доли секунды.

Если указана задержка 0.10 секунд, частота кадров получится равной 10 кадров в секунду. Для сравнения: телевизор работает с частотой 25 кадров в секунду.

Чем больше кадров в секунду при анимации, тем более плавным выглядит движение. Попробуйте умеличить задержку до 0.5 секунды (delay(0.50);) и посмотрите, как это выглядит. Попробуйте также delay(0.025).

Выберите скорость анимации, подходящую для Вашего компьютера.

Другой способ

Метод getDrawingHeight() возвращает высоту окна в виде целого числа. Мы хотим, чтобы мячик двигался вниз, пока не достигнет края окна. Но надо учесть высоту мячика, не так ли?

Но мы можем захотеть, чтобы мячик выдвигался за пределы окна. Поэтому дадим ему опускаться до тех пор, пока координата y не сравняется с высотой окна.

void main() {
    // Инициализируем y
    int y = 0;
    int howFar = getDrawingHeight();
 
    // Зеленый мячик
    setColor(green);
    while (y < howFar)
    {
        // Рисуем круг
        fillCircle(150, y, 50);
 
        // Смещаем каждый раз на 5 точек
        y = y + 5;
        delay(0.1);
        clearDrawing();
    }
}

Перейдем к следующему уроку.

 
proj/lang/judo/tutorial-ru-007.txt · Последние изменения: 2007/03/10 04:28
 
Copyright (C) 1996-2013 Serge Vakulenko
serge@vak.ru