102. [game] Управление анимацией персонажа с помощью клавиатуры

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

В предыдущей статье Анимация персонажа. Продолжение мы с вами создали класс UnitView и подключили к нему контроллер RandomController, который умеет проигрывать случайные анимации idle, если юнит стоит без движение некоторое время. В этой статье мы подключим к классу UnitView еще один контроллер: MoveController, который будет отвечать за управление юнитом с клавиатуры на игровом поле. Подключение контроллеров управления мы реализуем так, чтобы при необходимости мы смогли быстро подменить контроллер на другой, который будет использоваться в мобильных(iOS/Android) приложениях. Таким образом мы подготовим наше приложение для кросс-платформенной разработки.

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

Реализация контроллера MoveController будет происходить в два шага:

Шаг 1. Создаем контроллер Юнита

Для реализации выше сказанного нам придется немного видоизменить созданный в предыдущей статье класс UnitView: во первых мы удалим метод play, чтобы нельзя было проиграть любую анимацию извне класса UnitView. Во вторых дополним методы startWalk и stopWalk так, чтобы анимация на игровом поле выглядела более привлекательно. Вот как будет выглядеть измененный класс UnitView:


Закрыть UnitView


Обратите внимание на метод startWalk. Вот как выглядел этот метод прошлый раз:

Во первых мы сделали проверку, если юнит уже находится в движении – то ничего не делаем. Во вторых мы убрали добавление в очередность анимации walk, это необходимо для того чтобы анимация walk не начиналась в том случаем, если мы отпустили клавишу движения до того как завершилась анимация start_walk. Анимация walk стартует в момент когда завершилась анимация start_walk в методе checkTurn()(строчка 122). И в третьих в методе startWalk вы вызываем метод checkTurn, для того чтобы анимация старта начиналась сразу, не дожидаясь окончания проигрывания текущей анимации idle.

В методе stopWalk запускается метод checkTurn в том случаем если текущая анимация это walk, чтобы анимация остановки запустилась сразу, не дожидаясь окончания проигрывания анимации walk. Также в обновленном классе появились новые методы isWalk, attack и playRandomIdle.


Так же изменился класс RandomController:


Закрыть RandomController

Здесь мы изменили только метод timeoutHandler. Во первых сделали проверку, если в данный момент проигрывается анимация walk – то ничего не делаем. Во вторых вместо вызова метода play, сделали вызов метода playRandomIdle, который умеет проигрывать только рандомную анимацию idle. Сделано это для того чтобы не было возможности извне класса UnitView проиграть любую анимацию по имени.


Классы AnimationData и UnitViewEvent остались без изменений, кроме того что изменился пакет:


Закрыть AnimationData


Закрыть UnitViewEvent


Создайте в каталоге game/controllers/ каталог move/, в этом каталоге мы будем создавать контроллеры которые отвечают за управление движением юнита. Создайте в каталоге game/controllers/move/ класс MoveController:


Закрыть MoveController

Самое интересное в этом классе, это встроенный класс MoveInfo. В этом классе мы постоянно сохраняем какие из стрелок на клавиатуре нажаты в данный момент. А в обработчике события ENTER_FRAME в зависимости от того, какие стрелки зажаты, осуществляет движение в нужную сторону.

События клавиатуры можно услышать только подписавшись на stage, а свойство stage у нас есть только у объекта unitView. Поэтому, прежде чем начать слушать события клавиатуры, нам необходимо проверить наличие свойства stage у unitView, если его нет – надо дождаться события ADDED_TO_STAGE.


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


Закрыть GameApp

Для использования это класса, необходимо в корень проекта поместить каталог images/ с картинкой игрового поля arena.jpg:
unitAnimPart3_arena

В этом классе мы создаем фоновую картинку, создаем юнита и после того как юнит отправит событие UnitViewEvent.COMPLETE – создаем два контроллера: RandomController и MoveController. Контроллер для управления с клавиатуры делается активным.

Вот что у вас должно получиться в итоге:

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

Шаг 2. Выбор и активация юнита

Итак, у нас есть юнит который умеет ходить по игровому полю. Давайте теперь реализуем механизм выбора юнита и подсветки выбранного, чтобы было понятно кто сейчас ходит. Для этого в пакете game/unit/ мы создадим новый класс SelectedView. Для использования класса, необходимо поместить в каталог /images/ картинку с именем selected.png:
unitAnimPart3_selected
Эту картинку мы будем отображать под выбранным в данный момент юнитом. Вот как будет выглядеть класс SelectedView:


Закрыть SelectedView


В классе UnitView добавляем код для создания и отображения компонента SelectedView:


Закрыть UnitView

Здесь мы создали новый метод selected который отображает компонент SelectedView. Этот метод должен вызываться из контроллера MoveController, в момент когда он становится активным.


Класс MoveController изменится не очень сильно, надо лишь в методы activate и deactivate добавить вызовы метода selected у объекта класса UnitView(строки 173 и 190):


Закрыть MoveController


В главном классе приложения добавляем слушателей клика мыши по фону и юниту, в первом случае делаем контроллер не активным, во втором случае – восстанавливаем активность контроллера:


Закрыть GameApp

Посмотрите на итоговый результат. Кликните на фоновую картинку чтобы убрать выделение флешки, после чего вы не сможете управлять юнитом с помощью клавиатуры. Чтобы восстановить выделение юнита и управление им с клавиатуры – кликните по юниту:

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


В следующем уроке мы напишем контроллер для управления юнитом в игре для мобильной платформы. Так же обсудим способы создания мультиплатформенных игр. Следите за новостями и не забывайте оставлять комментарии.

Серия статей на тему использования анимации персонажей в коде 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
Эту статью прочитали 3617 раз

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

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


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




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




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