MRNOMGAME: ОСНОВНА АКТИВНІСТЬ – РОЗРОБКА ІГОР ДЛЯ ОС ANDROID

&nbsp

Нашому додатком необхідна точка входу, яка також називається в Android активністю, що задається за замовчуванням Ми назвемо цю активність MrNomGame і успадкуємо від Androi dGame, класу, який ми реалізували для того, щоб написати гру Цей клас необхідний для створення і запуску нашого першого екрана У лістингу 61 показаний клас MrNomGame

Лістинг 61 MrNomGameJava, наш головний гібрид активності та ігри package combadlogiсandroidgamesmrnom

Все, що необхідно зробити, – успадкувати від Androi dGame і реалізувати метод getStartScreen, який поверне екземпляр класу Loadi ngScreen (ми реалізуємо його буквально через хвилину) Це дозволить нам приступити до найважливіших питань, які потрібно вирішити для написання нашої гри: від налаштування різних модулів звуку, графіки, введення і файлового введення / виведення до запуску потоку основного циклу Як бачите, все досить просто, чи не так

Ресурси: зручне сховище ресурсів

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

У них будуть міститися всі Pi xmap і Sound, які ми завантажили з ресурсів (весь клас показаний в лістингу 62)

Лістинг 62 Assetsjava, тут для швидкого доступу містяться всі ресурси Pixmap і Sound

У нас є статичний член для кожного зображення і звуку, які ми завантажили з ресурсів Якщо ми захочемо використовувати один з цих ресурсів, то можемо вчинити так:

або так:

Тепер зберігання стало значно зручніше Проте зверніть увагу, що ніщо не заважає нам перезаписати ці статичні члени, оскільки вони не є фінальними Але оскільки ми не Перезаписуємо їх, ми можемо бути спокійні Ці загальнодоступні нефінальние члени представляють собою патерн проектування, вірніше, антіпаттерн Проте в нашій грі можна трохи полінуватися Правильніше було б приховати ці ресурси за методами-одержувачами і методами-установниками в так званому класі-Сінглтон Однак ми будемо використовувати наш простенький диспетчер ресурсів

Налаштування: збереження налаштувань користувача і таблиці рекордів

Є ще дві речі, які нам необхідно відобразити на екрані завантаження: користувача настройки і таблицю рекордів Якщо ви знову подивитеся на екрани головного меню і таблиці рекордів побачите, що користувач може регулювати звук, а також те, що ми зберігаємо пять кращих рекордів Ми збережемо дані налаштування на карту памяті для того, щоб їх можна було заново завантажити, коли гра буде запущена в наступний разів Для цього реалізуємо ще один простий клас – Settings (лістинг 63)

Лістинг 63 SettingsJava: зберігає, завантажує і зберігає наші налаштування package combadogicandroidgamesmrnom

Програються чи звукові ефекти, залежить від загальнодоступного статичного булева значення soundEnabled Таблиця рекордів зберігається в целочисленном масиві з пяти елементів, відсортованих у порядку убування Ми задаємо за замовчуванням для обох налаштувань тільки такі дані, які доцільно так задавати Можна отримати доступ до цих двом членам так само, як до членів класу Assets

Статичний метод loadО намагається завантажити налаштування з файлу Mrnom із зовнішнього сховища Для цього йому необхідний екземпляр класу Fi1е, який ми передаємо методу Він припускає, що налаштування звуку і кожна запис рекорду зберігаються в окремому рядку, і просто читає їх Якщо щось йде не так (наприклад, сховище недоступно або файл настройок ще не готовий), ми просто залишаємо значення за замовчуванням і ігноруємо помилку

Наступний метод називається save О Він бере поточні налаштування і серіалізуются їх у файл mrnom на карті памяті (наприклад, / sdcard / mrnom) Налаштування звуку і кожна запис рекордів зберігаються як окрема рядок в цьому файлі, як це і передбачається методом 1oad Якщо щось піде не так, ми просто ігноруємо помилку і використовуємо дані за замовчуванням, зазначені раніше Можливо, ви захочете проінформувати користувача про помилку завантаження

Останній метод, addScoreO, – допоміжний Ми будемо використовувати його для того, щоб додати новий рекорд в таблицю рекордів, автоматично сортуючи їх

LoadingScreen: отримання ресурсів з накопичувача

За допомогою цих класів ми тепер зможемо з легкістю реалізувати завантажувальний екран У лістингу 64 показаний необхідний для цього код

Лістинг 64 LoadingScreenJava, який завантажує всі обєкти і настройки package combadlogiсandroidgamesmrnom

Ми успадковуємо клас Loadi ngScreen від класу Screen Для цього необхідно реалізувати конструктор, що приймає параметр з типом Game, який ми передаємо конструктору батьківського класу Зверніть увагу, що цей конструктор буде викликатися в MrNomGamegetStartScreen, який ми описали раніше

Далі слід реалізація методу updateO, який завантажує обєкти і налаштування Для обєктів-зображень ми просто створюємо нові Pixmap за допомогою методу GraphicsnewPixmapO Зверніть увагу, що ми уточнюємо, який формат кольору повинен мати Pi xmap Фон має формат RGB565, а всі інші зображення – ARGB4444 Ми це робимо для прискорення візуалізації Наші вихідні зображення зберігаються у форматах PNG RGB888 і ARGB8888 Ми також завантажуємо три звукових ефекту і зберігаємо їх у відповідних членах класу Assets Далі завантажуємо налаштування з зовнішнього сховища за допомогою методу Setti ngs load Нарешті, запускаємо перехід екрану до обєкта Screen під назвою MainMenuScreen, який з цього моменту прийме на себе виконання команд

Решта методів – просто заглушки, вони нічого не роблять Оскільки метод update негайно запустить перехід екрану після того, як всі обєкти завантажені, на цьому екрані нам більше нічого робити не треба

Джерело: 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>

*

*