Главная » Программирование игр под Android » Интерфейс Touch Handler – РАЗРАБОТКА ИГР ДЛЯ ОС ANDROID

0

Чтобы мы могли использовать два класса обработчиков, заменяя один другим, нам необходимо определить общий интерфейс. В листинге 5.8 показан данный интерфейс, называющийся TouchHandler. 7

Листинг 5.8. PeaлизaцияTouchHandler.java для Android 1.5 и 1.6. package corn, badl ogi с. androi dgames. framework. imp.;

Bee TouchHandler должны реализовать интерфейс OnTouchl istener, который используется для того, чтобы зарегистрировать обработчик во View. Методы интерфейса соответствуют методам интерфейса Input. Первые три метода применяются для получения состояния определенного указателя, а четвертый необходим для получения TouchEvent, чтобы мы смогли обработать события ввода. Обратите внимание, что данный метод для опроса принимает ID указателя.

Класс SingleTouchHandler

В случае с обработчиком одиночных касаний мы принимаем во внимание только нулевой ID. Давайте вспомним, как работает класс TouchEvent, когда говорили об интерфейсе Input:

Как и в классе KeyEvent, здесь определяется пара констант, а также хранится тип события касания, х- и у- координаты в координатной системе вида View и ID указателя.

Листинг 5.9 показывает реализацию интерфейса TouchHandlег для Android версий 1.5 и 1.6.

Листинг 5.9. SingleTouchHandler.Java; подходит только для обработки одиночных касаний

Мы начинаем с того, что реализуем интерфейс TouchHandler. А это также предполагает, что нам придется реализовать интерфейс OnTouchLi stener. Далее следуют несколько членов, которые вам уже знакомы. На данный момент у нас есть три члена, которые хранят текущее состояние сенсорного экрана для одного пальца, за ними следует Pool и два списка TouchEvent. То же самое происходило в KeyboardHandlег. У нас также есть два члена: scaleX и scaleY. К ним мы вернемся чуть позже. Они необходимы для того, чтобы справиться с разными разрешениями экрана.

ПРИМЕЧАНИЕ

Конечно, мы могли бы сделать более стройную систему, позволив KeyboardHandler и ingleTouchHandler наследовать от основного класса, который отвечает за сбор информации и синхронизацию. Однако объяснение стало бы еще более сложным, так что мы просто напишем еще несколько строк кода.

В конструкторе регистрируем обработчик как OnTouchLi stener и инициализируем Pool, который используем для переработки TouchEvent. Мы также сохраняем параметры sealеХ и scaleY, которые передаются конструктору (однако пока не сосредотачиваемся на них).

Метод onTouchC выполняет те же функции, что и метод опКеу для KeyboardHandl ег. Единственная разница состоит в том, что теперь мы обрабатываем TouchEvent, а не KeyEvent. Вы уже знакомы с особенностями синхронизации, сбора данных и обработкой MotionEvent. Единственная вещь, которая заслуживает отдельного внимания, это то, что мы фактически умножаем полученные х- и у-координаты на sea1еХ и sealeY соответственно. Запомните этот момент, мы вернемся к нему чуть позже.

Методы sTouchDown, getTouchXC и getTouchYC позволяют получить информацию о состоянии сенсорного экрана, основываясь на значениях, которые были заданы в методе onTouch . Единственный примечательный момент, связанный с ними, заключается в том, что они возвращают полезные данные для указателя с нулевым значением ID, так как в данном классе мы работаем только с экранами, поддерживающими обработку одиночных касаний.

Последний метод, SingleTouchHandler.getTouchEventsC, должен уже быть вам знаком. Он работает так же, как методы KeyboardHandler.getKeyEvents. Необходимо вызывать этот метод достаточно часто, чтобы список touchEvents не переполнялся.

 

Источник: Mario Zechner / Марио Цехнер, «Программирование игр под Android», пер. Егор Сидорович, Евгений Зазноба, Издательство «Питер»

По теме:

  • Комментарии