Циклическая анимация фона - Часть первая
17.04.2008, автор: Stormit, рубрики: ActionScript, Игровые баннерыБольшинство игр и баннеров построены таким образом, что главный герой все время расположен по центру экрана, даже если он бежит. Вместо него движется фон (ну и конечно окружающие его противники).
Если это серьезная флэш-игра, то скорее всего фон либо рисуется сплошной картинкой на весь уровень, либо (если первый вариант нагружает процессор) режется на куски, и отображается по мере попадания их в поле зрения. Но часто в этом нет острой необходимости. В простых играх и баннерах вполне достаточно иметь фон с зацикленной анимацией, пусть даже он всего-то, чуть больше размера флэшки.
Сама циклическая анимация создается по принципу “бесшовных текстур”. Края фонового изображения при стыковке должны создавать неразрывную картинку.
Самый простой способ - сделать все твиннингом. Но при этом теряется контроль над скоростью анимации (доступны только stop() и play() ). Если персонаж обладает ускорением, нестыковки с фоном будут обязательно.
Поэтому фон лучше двигать программно (вообще для игровых баннеров, где размер файла диктует много ограничений, лучше всю линейную анимацию делать скриптами). Описание и пример ниже:
- Рисуем фон.
- Растягиваем его по размерам будущей флэшки, даже чуть больше. Если есть выступающие элементы, их нужно отрезать с одной стороны и перенести в другую (я так поступил с тенью от забора).
- Оборачиваем все это в клип, дублируем и переносим дубликат точно в конец оригинала. Это важно, иначе фон при анимации может дергаться. Кстати сейчас очень удобно доработать “бесшовность” - линии между клипами должны соединяться без изломов. Выделяем оба клипа и оборачиваем их в еще один клип.
- На этом символе пишем код:
onClipEvent (load) { speed = 4;//скорость x0 = _x;//Запоминаем начальное положение x9 = x0 - _width / 2;//максимально-допустимое левое положение onEnterFrame = function() { _x -= speed; var dx = x9 - _x; //Вычисляем перебор if (dx > 0) { _x = x0 - dx;//Компенсируем его и возвращаем в начальное положение } } }
Вначале запоминаем начальное положение фона и как только он смещается на половину ширины, возвращаем его назад. Плюс, я еще учитываю насколько мы перескочили середину. Сейчас проверка работает только слева (в баннерах почему-то всегда так :)), но при желании ее можно сделать в обе стороны.
- Получаем зацикленную анимацию.
- Вот так, если добавить окружение и действующее лицо.
- Или вот так.
- Или так.
Анимация сейчас привязана к переменной speed, которую можно менять по обстоятельствам.
Кому интересно, дальше о том, как анимируется мяч: Читать полностью »



