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

0

Android предлагает нам два больших API для прорисовки экрана. Один из них используется в основном для программирования 20-графики, второй – для аппаратно ускоренного 3D. В этой и следующей главах мы сфокусируемся на разработке 20-графики с помощью Canvas API, являющегося, по сути, качественной оберткой для библиотеки Skia и подходящего для большинства сложных 2D-nrp. Однако прежде чем этим заняться, нам необходимо прояснить для себя два аспекта: переход в полноэкранный режим и защиту от блокировки.

Использование защиты от блокировки

Если вы перестанете работать с нашим тестовым приложением на несколько секунд, экран вашего телефона потускнеет. Прежняя яркость вернется, только если вы коснетесь экрана или нажмете кнопку. Чтобы дисплей всегда был доступен, мы можем использовать так называемую защиту от блокировки. Первое, что нам необходимо сделать, – добавить соответствующий тег <user-permission> в файл манифеста с именем android, permission. WAKE L0CK. Это позволит нам использовать класс WakeLock.

Экземпляр WakeLock получается от PowerManager следующим образом:

Как и другие системные службы, мы получаем PowerManager от экземпляра Context. Метод PowerManager. newWakeLock принимает два аргумента: тип блокировки и произвольно определяемый текст тега. Существует два типа защиты от блокировки; для наших целей подходит PowerManager.FULL WAKEJ OCK. Его использование гарантирует, что экран все время будет включен, процессор будет работать на полную мощность, а клавиатура будет доступна.

Для включения защиты от блокировки необходимо вызвать следующий метод:

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

Обычно мы инициализируем экземпляр WakeLock в методе Activity.onCreateC), вызываем WakeLock. acquire в методе Activity .onResume, a WakeLock. releasee) вызываем в методе Activity.onPause. Таким образом, мы гарантируем, что наше приложение будет корректно работать в режиме паузы или восстановления. Итак, нам необходимо добавить всего четыре строчки кода, поэтому предлагаю не писать для этого полноценный пример. Вместо этого добавим их в пример для полноэкранного режима и посмотрим на результаты.

Полноэкранный режим

Перед тем как с головой погрузиться в рисование первых фигур с помощью Android API, решим еще один вопрос. До этого момента все наши активности демонстрировали свои строки заголовка. Кроме того, была видна панель оповещения. Хотелось бы создать у наших будущих игроков больший эффект погружения, убрав с экрана эти элементы. Сделать это можно двумя простыми вызовами:

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

Листинг 4.11. FullScreenTest.Java; делаем нашу активность полноэкранной package com.badlogi с.androi dgames;

Что тут происходит? Мы просто наследуемся от класса TouchTest, созданного нами ранее, и переопределяем его метод onCreateO, в котором включаем полноэкранный режим, и затем вызываем базовый метод наследуемого класса (в данном случае это активность TouchTest), который делает всю остальную работу по созданию активности. Вновь обращаю ваше внимание: эти два метода нужно вызывать перед установкой контейнера для содержимого, поэтому метод базового класса вызывается после этих методов. Кроме того, мы зафиксировали ориентацию нашей активности в портретном режиме в файле манифеста. Ведь вы не забывали добавлять туда элементы <аctivity> для каждой созданной нами активности? С этого момента мы всегда будем жестко задавать портретный или ландшафтный режим, поскольку нам не нужно изменение координатной системы.

Наследуясь от Touchiest, мы получаем полностью рабочий пример, с помощью которого сможем изучить координатную систему, в которой будем рисовать. Активность покажет нам координаты касания экрана (как в старом примере TouchTest). Разница в том, что теперь, в полноэкранном режиме, максимальные величины координат совпадают с разрешением дисплея (минус 1 по обоим направлениям, ведь мы начинаем с (0; 0)). В случае с Nexus One координатная система будет начинаться с (0; 0) и заканчиваться в (479; 799) в портретном режиме (разрешение 480 х 800).

Хотя у вас может создаться впечатление, что экран перерисовывается постоянно, на самом деле это не так. В классе TouchTest мы обновляем TextView каждый раз, когда происходит событие касания экрана (что, в свою очередь, заставляет TextVi ew перерисовываться). Сам по себе TextView обновляться не будет. Для игры необходимо, чтобы экран перерисовывался как можно чаще – желательно внутри нашего главного потока. Но мы начнем с более простого – с непрерывной визуализации в потоке пользовательского интерфейса.

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

По теме:

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