вторник, 15 апреля 2008 г.

Движение с ускорением


Комары летают с ускорением

Возникала у меня потребность сделать во Flash программное движение с ускорением. Причем важно было чтобы анимация начиналась в строго заданной точке и заканчивалась также в строго определенной точке. Попытки построит инкрементный алгоритм на основе школьной формулы расчета пути пройденного при движении с ускорением успехом не увенчались. При движении объект двигаясь с ускорением, проходил дальше конечной точки и только потом в нее возвращался. Судя по всему причиной тому особенности инкрементного алгоритма. Кроме того формулы для расчета необходимых значений скорости и ускорения получались очень громоздкими.

Оказывается существует более простая реализация движения с ускорением. Выше на странице размещен пример такой реализации. В нем для каждого комара прописан вот такой код:

// ДВИЖЕНИЕ С УСКОРЕНИЕМ

// Конечные координаты
finishX = Math.random() * Stage.width;
finishY = Math.random() * Stage.height;

finishAngle = 20 - Math.random() * 40;

// От этой величины зависит скорость движения и ускорение.
// Чем больше значение, тем медленнее движение.
speed = 8;

onEnterFrame = function () {
// Пока не достигли конечных координат продолжаем движение
if (Math.abs(_x - finishX) > 0.5 && Math.abs(_y - finishY) > 0.5) {
_x += (finishX - _x) / speed;
_y += (finishY - _y) / speed;
_rotation += (finishAngle - _rotation) / speed;
}
// А потом начинаем всё с начала
else {
_x = finishX;
_y = finishY;
_rotation = finishAngle;
finishX = Math.random() * Stage.width;
finishY = Math.random() * Stage.height;
finishAngle = 20 - Math.random() * 40;
}
}

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

5 комментариев:

  1. вот это действительно интересно, обязательно попробую в своих начинаниях с Флешем

    ОтветитьУдалить
  2. Забавно было бы если бы от мышки бы один из камаров бы шугался :)

    ОтветитьУдалить
  3. Здесь конечно не комар, но во время загрузки бабочка от курсора улетает:

    http://www.belonogov.ru/...

    ОтветитьУдалить

Примечание. Отправлять комментарии могут только участники этого блога.