Основи програмування графіки – РОЗРОБКА ІГОР ДЛЯ ОС ANDROID

Android пропонує нам два великих API для промальовування екрана Один з них використовується в основному для програмування 20-графіки, другий – для апаратно прискореного 3D У цій та наступній главах ми сфокусуємося на розробці 20-графіки за допомогою Canvas API, який є, по суті, якісної обгорткою для бібліотеки Skia і відповідного для більшості складних 2D-nrp Однак перш ніж цим зайнятися, нам необхідно прояснити для себе два аспекти: перехід в повноекранний режим і захист від блокування

Використання захисту від блокування

Якщо ви перестанете працювати з нашим тестовим додатком на кілька секунд, екран вашого телефону потьмяніє Колишня яскравість повернеться, тільки якщо ви торкнетеся екрана або натиснете кнопку Щоб дисплей завжди був доступний, ми можемо використовувати так звану захист від блокування Перше, що нам необхідно зробити, – додати відповідний тег в файл маніфесту з імям android, permission WAKE L0CK Це дозволить нам використовувати клас WakeLock

Примірник WakeLock виходить від PowerManager наступним чином:

Як і інші системні служби, ми отримуємо PowerManager від екземпляра Context Метод PowerManager newWakeLock приймає два аргументи: тип блокування і довільно визначається текст тега Існує два типу захисту від блокування для наших цілей підходить PowerManagerFULL WAKEJ OCK Його використання гарантує, що екран весь час буде включений, процесор буде працювати на повну потужність, а клавіатура буде доступна

Для включення захисту від блокування необхідно викликати наступний метод:

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

Зазвичай ми инициализируем примірник WakeLock в методі ActivityonCreateC), викликаємо WakeLock acquire в методі Activity onResume, a WakeLock releasee) викликаємо в методі ActivityonPause Таким чином, ми гарантуємо, що наш додаток буде коректно працювати у режимі паузи або відновлення Отже, нам необхідно додати всього чотири рядки коду, тому пропоную не писати для цього повноцінний приклад Замість цього додамо їх у приклад для повноекранного режиму і подивимося на результати

Повноекранний режим

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

Перший рядок прибирає рядок заголовка активності Щоб прибрати ще й панель оповіщення і таким чином зробити активність повноекранної, ми викликаємо другий метод Зверніть увагу: обидва цих методу необхідно викликати до установки уявлення відображення для нашої активності Лістинг 411 демонструє дуже просту тестову активність, що переходила в повноекранний режим

Лістинг 411 FullScreenTestJava робимо нашу активність повноекранної package combadlogi с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», пров Єгор Сидорович, Євген зазноби, Видавництво «Пітер»

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*