100. [game] Анимация персонажа. Продолжение

Game – Серия статей посвященных разработке flash-игр на языке ActionScript. Игры для соц.сетей и мобильных платформ iOS, Android.
http://flashpress.ru/blog/category/game/
Серия статей на тему использования анимации персонажей в коде ActionScript 3.0
  1. Анимация персонажа
  2. Анимация персонажа. Продолжение
  3. Управление анимацией персонажа с помощью клавиатуры
  4. Управление анимацией персонажа с помощью сенсорного экрана. Создаем мультиплатформенное приложение
  5. Взаимодействия юнитов на игровом поле. GameController и UnitActions
  6. Хочу продолжение > хочу

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

  1. Добавим Очередность анимаций, что бы новая анимация не начинала проигрываться до тех пор пока не закончится текущая
  2. Реализуем механизм проигрывания Комбинированных анимаций
  3. Добавим несколько Дополнительных анимаций idle, что бы персонаж выглядел более привлекательнее


Очередность анимаций

При попытке проиграть анимацию(в методе play, строка 163), мы записываем название анимации в очередь. В момент когда анимация завершилась(строка 143), запускаем функцию проверки очереди. В этой функции(строка 99) проверяем если очередь не пустая, запускаем первую анимацию из очереди. Если очередь пустая – зацикливаем walk или idle, или же останавливаем анимацию если была проиграна анимация смерти.

Вот как будет выглядеть флешка:

Прокликайте сразу несколько анимаций в списке, и они будут воспроизводиться по очереди.
Здесь должна быть флешка. Установите Flash Player

Комбинированные анимации

Посмотрите внимательно на анимацию движения этого персонажа. В момент когда персонаж начинает(или прекращает) движение, видно что переход из одной анимации в другую происходит не очень красиво. А если у нас персонаж который не ходит а летает, тогда такой переход будет заметен сильнее. Что бы обойти эту проблему, необходимо к анимации walk добавить еще две: start_walk и stop_walk, который показывают начало движения и окончания соответственно. Посмотрите на эту флешку, нажмите сперва на кнопку walk в левом списке – вы увидите резкую смену анимации персонажа. Затем верните персонажа в состояние idle и нажмите сперва на кнопку start walk а затем stop walk – переход анимаций будет происходить более плавно:

Здесь должна быть флешка. Установите Flash Player

Давайте разберем как это можно сделать. Для начала дизайнеры/аниматоры должны нарисовать анимации начала и конца движения. Этим анимациям, так же как и другим, необходимо задать соответствующие метки: start_walk и stop_walk. Посмотреть исходники этих анимаций можно здесь.

Далее редактируем наш класс UnitView:

Ну и как будет выглядеть главный класс приложения:

Оживление персонажа. Добавляем случайные анимации idle

Посмотрите на анимацию idle во флешке выше. Грифон стоит и качается. Давайте попробуем немного оживить его, добавив различные анимации, которые будут проигрываться рандомно в момент когда персонаж находится в состоянии idle. Посмотрите на флешку ниже, если не трогать этого грифона в течении от 5 до 10 секунд, он начинают проигрывать различные анимации:

Здесь должна быть флешка. Установите Flash Player

Для реализации этого, необходимо на таймлайне создать дополнительные анимации, и задать им имя например idle_random{num}, где {num} – это порядковый номер анимаций. Посмотреть исходник анимации в формате FLA можно здесь.

Приступим к написанию кода. Первым делом мы создадим класс событие UnitViewEvent в каталоге unit/events/. Данное событие имеет две константы: UnitViewEvent.COMPLETE – окончание загрузки анимации, и UnitViewEvent.PLAY – проигрывается анимация. Вот как будет выглядеть этот класс:

Измененный класс UnitView:

Что мы изменили в этом классе? Только отправку событий – в строке 49 изменили тип отпралвяемого события(с Event.COMPLETE на UnitViewEvent.COMPLETE), и добавили новое событие UnitViewEvent.PLAY в метода checkTurn, в момент когда начинается проигрываться новая анимация(строчки 111-113).

Подготовительный процесс завершен, теперь напишем контроллер для управления случайными анимациями. Создайте каталог controllers в каталоге unit/, в этом каталоге мы создадим новый класс RandomController, который будет отвечать за случайное проигрывание дополнительных анимаций. Вы можете спросить: а зачем это выделять в отдельный каталог, когда можно было бы написать прямо внутри класса UnitView? Класс UnitView отвкчает за отображение анимации юнита, как это видно из названия класса, и в этом классе не должно быть ничего кроме функционала отображения анимации. В нашем примере, класс контроллер будет отображать случайные анимации idle, в том случае если юнит находится в покое от 5 до 10 секунд. Вы можете усложнить эту логику и сделать игру более интересной, например можно сделать так что бы юнит становился агресивным после удара по нему, если жизней осталось меньше 10%. Или сделать приветственную анимацию если рядом появился дружественный юнит… все ограничено только вашей фантазией. Если вы сделаете несколько типов случайных анимаций, это сильно усложнит класс UnitView, что не очень хорошо, поэтому мы и выделили логику случайных анимаций idle в отдельный класс RandomController. Вот как он будет выглядеть:

Главный класс приложения будет выглядеть так:

Обратите внимание на строчку 41, в ней мы создали новый контроллер и передали ему в качестве параметра ссылку на объект класса UnitView. Далее контроллер будет управлять юнитом на свое усмотрение, при этом класс UnitView остался таким же простым как и было изначально. В любой момент вы сможете включать или отключать действие контроллера. Для отклчюения можно в классе RandomController написать метод dispose, в котором будет убиваться все слушатели событий и остановится таймер.

Серия статей на тему использования анимации персонажей в коде ActionScript 3.0
  1. Анимация персонажа
  2. Анимация персонажа. Продолжение
  3. Управление анимацией персонажа с помощью клавиатуры
  4. Управление анимацией персонажа с помощью сенсорного экрана. Создаем мультиплатформенное приложение
  5. Взаимодействия юнитов на игровом поле. GameController и UnitActions
  6. Хочу продолжение > хочу
Game – Серия статей посвященных разработке flash-игр на языке ActionScript. Игры для соц.сетей и мобильных платформ iOS, Android.
http://flashpress.ru/blog/category/game/

Да прeбудет с вами Flash.
Serious Sam
Эту статью прочитали 2402 раз

Возникли вопросы по статье? Не стесняйтесь спрашивать в комментариях или любым другим способом на странице Контакты .

Присоединяйтесь к нам в социальных сетях: ВКонтакте , Twitter и Facebook
Понравилась статья? Буду благодарен если вы поделитесь ссылкой с друзьями:


Комментарии ВКонтакте:




Комментарии Facebook:




Комментарии WordPress: