103. [game] Управление анимацией персонажа с помощью сенсорного экрана. Создаем мультиплатформенное приложение

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

Одно из достоинств флеша в том, что на языке ActionScript можно с легкостью писать кроссплатформенные приложения. Т.е. вы можете писать один и тот же код ActionScript 3.0, а затем компилировать этот код под разные платформы, например для Web, iOS или Android. Но есть небольшая проблема, возникают ситуации когда необходимо в одном части приложения писать разные куски кода. Рассмотрим пример управления анимацией, который мы реализовали в предыдущем уроке Управление анимацией персонажа с помощью клавиатуры. Если мы будем переносить это приложение на мобильную платформу(iOS, Android) – этот контроллер нам не подойдет, и скорее всего нужен будет контроллер который управляет анимацией с помощью нажатий пальцем на экране и других мультитач жестов. В этом уроке мы с вами решим две проблемы:

  1. как писать мультиплатформенные приложения;
  2. напишем контролер управления для мобильных устройств, как показано на скриншоте:

unit-animation-touchscreen-controller-1

Мультиплатформенность

Как создать два разных контроллера и использовать их в одном приложении для разных платформ? Конечно можно создать два класса: KeyboardController и TouchscreenController, а в коде делать проверку, если текущая платформа Web – используем клавиатурный контроллер, если это iOS или Android – используем второй контроллер. Но у этого способа есть как минимум две проблемы.

Во первых , получится так, что оба контроллера будут вкомпилированы во все приложения(для всех платформ). Зачем приложению для Web знать о существовании контроллера для мобильных устройств? Да и к тому же объем приложения может вырасти, не на много конечно, но для мобильных игр/приложений – это может стать проблемой, учитывая что например AppStore не разрешит загрузку приложение больше 50 мегабайт, если вы не подключены к сети WiFi.

Во вторых , если вы будете использовать в контроллере классы не доступные в другой платформе, такие как классы для определение наклона устройства(в авиа симуляторе, например), то ваше приложение для платформы Web не будет скомпилировано.

В уроке Управление анимацией персонажа с помощью клавиатуры мы создали контроллер для управления анимацией с клавиатуры MoveController, который лежит в каталоге game.unit.controllers.move, давайте допишем его так, чтобы его можно было использовать и в мобильных приложениях. Для начала нам необходимо выделить из имеющего класса MoveController тот функционал который будет общий для всех контроллеров которые мы будем создавать для разных платформ. Например можно выделить инициализацию с сохранением ссылки на stage, и методы активации/деактивации контроллера. Вот как будет выглядеть базовый класс для всех контроллеров MoveBaseController:

Обратите внимание, что некоторые свойства и методы объявлены как protected, чтобы доступ к ним был только у потомков этого класса.

Измененный класс MoveController для Web платформы будет выглядеть так:

Теперь необходимо файл MoveController.as отделить от основного кода. Для этого мы создаем два каталога с исходниками: main/ и web/, в первом будут лежать все общие классы приложения, а в каталоге web/ – то, что используется только в web приложениях. После чего в каталоге создаем пакет(каталог) game/unit/controllers/move/ и помещаем в него класс MoveController, после чего в Web приложении необходимо подключить эти два каталога с классами. Т.к. класс MoveController лежат в том же пакете(game.unit.controllers.move) что и раньше, при создании приложения компилятор не заметит ни какой разницы.

Вы наверно заметили что класс MoveBaseController релализует интерфейс IMoveController. Попробую объяснить для чего это нужно. Давайте посмотрим, как выглядит этот интерфейс:

В нем описаны все свойства и методы которые должны быть реализованы в обязательном порядке в каждом подключаемом контроллере. В основном приложении вы используете ссылку на контроллер, определенный как

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

Вот и все, подготовительный процесс закончен, теперь вы можете создать новый каталог с классами, например каталог mobile/ для iOS и Android, и создать в нем новый класс контроллер, который должен лежать в том же пакете(!), называться должен так же MoveController(!) и у него должны быть все те же public методы и свойства, чтобы главное приложение не заметило разницы между этими классами.

Создаем контроллер для сенсорных экранов

Попробуем написать контроллер который управляем анимацией юнита на сенсорном экране мобильного устройства, как показано на скриншоте:
unit-animation-touchscreen-controller-1

Создайте ActionScript-проект мобильного приложения, подключите к нему каталог с основными классами приложение main/, создайте новый каталог mobile/, и подключите его так же к проекту. В каталоге mobile/ создайте пакет game.unit.controllers.move. Для начала напишем класс который управляет перемещением юнита (белый круг с шаром в центре):

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

Ну и осбственно сам класс контроллер MoveController:

Данный класс создает экземпляр класса MoveView и отображает его в левой части экрана. В правой части экрана создаются две кнопки для атаки и блокировки атаки. В момент когда мы начинаем таскать белый шар слева, мы получаем событие MoveViewEvent с параметром direction:Point – вектор направление и скорость движения.

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

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

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

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


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




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




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