137. [game] XProject1. Обработка Touch-событий на мобильной платформе

Game – Серия статей посвященных разработке flash-игр на языке ActionScript. Игры для соц.сетей и мобильных платформ iOS, Android.
http://flashpress.ru/blog/category/game/

Суть проблемы

В стандартной событийной модели ActionScript имеются некоторые неувязки при использовании touch-событий.
Например, в моем приложении необходимо было использовать событие зума TransformGestureEvent.GESTURE_ZOOM (сведение/разведение двух пальцев на сенсорном экране), а для того, чтобы это событие стало доступным, необходимо включить специальный input-режим:

, который в свою очередь отключает поддержку touch-событий TouchEvent, которые необходимы для обработки одиночных касаний на экране.
Другая проблема: в приложении есть визуальный компонент, который может обрабатывать сразу несколько touch-событий:

  • Таскание элемента вверх/вниз – скролл
  • Таскание элементы вправо/влево – чтобы скрыть его
  • Одиночное касание пальцем над элементом

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

Третья проблема заключается в том, что стандартные touch-события нельзя тестировать в обычном flash-приложении(не мобильном).

Touch-менеджер

Для решения этой проблемы я написал Touch-менеджер, который генерирует нужные события. Чтобы лучше понять работу менеджера, посмотрите на флешку ниже. После нажатия на кнопку show list открывается дополнительное меню со списком. Этот список можно прокручивать вверх и вниз, а для того чтобы закрыть это меню, нужно его потянуть вправо:

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


Исходники проекта можно получить здесь. Touch-менеджер лежит в пакете ru.flashpress.touch. Краткое описание как им пользоваться: Для начала необходимо зарегистрировать DisplayObject в менеджере:

Метод TouchManager.register вторым параметром может принимать объект TouchInfo, который имеет два параметра:

  • length2Start – На сколько пикселей надо сдвинуть палец, чтобы началось движение
  • length2Swipe – На сколько пикселей надо сдвинуть палец, чтобы сработало событие SWIPE

Остановлюсь подробнее на параметре length2Start. Пока палец не сдвинулся на расстояние большее чем это значение, события движения не срабатывают. Событие TAP не срабатывает после отпускания пальца если палец сместился больше чем на length2Start.

Далее подписываемся на одно из событий:

  • TouchEvent.UP – движение вверх
  • TouchEvent.RIGHT – движение вправо
  • TouchEvent.DOWN – движение вниз
  • TouchEvent.LEFT – движение влево
  • TouchEvent.TAP – событие касания пальцем

Событие TouchEvent имеет один объект TouchData, которые имеет множество параметров, главный из них это фаза (phase):

Типы фаз:

  • TouchPhases.BEGIN – начало движения, палец прикоснулся к экрану
  • TouchPhases.UPDATE – палец движется по экрану
  • TouchPhases.UP – конец движения, палец убрали с экрана
  • TouchPhases.SWIPE – был стандартный “свайп” жест
Game – Серия статей посвященных разработке flash-игр на языке ActionScript. Игры для соц.сетей и мобильных платформ iOS, Android.
http://flashpress.ru/blog/category/game/

Игры будут править миром!
Serious Sam
Эту статью прочитали 2354 раз

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

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


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




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




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


    1. Serious Sam Автор записи

      TheRabbit, когда я писал что нельзя тестировать touch-события, я имел ввиду web-приложение(не AIR), просто какие то части большого приложения проще тестировать как обычную флешку, чем собирать каждый раз AIR приложение.

      Можно еще запускать флешовый SimController с помощью ant или командной строки. Проблема в том, что это не всегда не удобно :)

      1. @TheRabbitFlash

        Смотри.. Была давно прога, которая так же как и SimController работает – создает overlay для захвата событый и транспортит их во флеш. Если не ошибаюсь – через классы автоматизации пропихивались тач события. Хотя эти классы и создавались для юнит-тестов – они чудесно использовались и для других целей ;)