ПЛАН РОЗРОБКИ DROID INVADERS

&nbsp

Після того як ми визначили ігрову механіку, дизайн та ресурси, ми можемо почати програмувати Як звичайно, створюємо новий проект, копіюємо в нього весь код нашого фреймворка, переконуємося, що у нас є підходящий маніфест, значки і т д Весь код гри Droid Invaders буде поміщений в пакет com badl ogi с androi dgames droi di nvaders Ресурси будуть зберігатися в директорії assets проекту для ОС Android Ми використовуємо точно таку ж структуру, яку застосовували для гри Великий стрибун: стандартна активність буде наслідувати від класу GLGame, кілька екземплярів класу GLScreen представлятимуть собою різні екрани і переходи, як показано на рис 124, класи для завантаження ресурсів і зберігання налаштувань, а також класи для наших ігрових обєктів і клас, отрісовиваємих наш ігровий світ в 3D Почнемо з класу Assets

КЛАС ASSETS

Ми вже робили це раніше, тому не чекайте нічого дивного Код класу показаний в лістингу 121

Лістинг 121 Клас Assetsjava завантажуємо і зберігаємо активи, як і зазвичай

Тут є кілька членів, що зберігають текстури елементів користувальницького інтерфейсу і фонового зображення Ми також зберігаємо кілька екземплярів класу TextureRegi oris і Font Цього вистачить для всіх наших потреб, що стосуються інтерфейсу користувача

У нас також є текстури і екземпляри класу Vertices3, що зберігають моделі і текстури ігрових обєктів Крім того, ми маємо екземпляр класу Animation, в якому зберігаються кадри анімації вибуху

Нарешті, в класі є кілька примірників класів Music і Sound, що зберігають звуки гри

Метод load починається зі створення всього необхідного для користувача інтерфейсу Як і зазвичай, ми просто завантажуємо кілька текстур і створюємо регіони

Далі створюємо екземпляр класу Texture для анімації вибуху, а також текстурні регіони для кожного кадру і екземпляр класу Animation Ми просто проходимо в циклі від верхнього лівого кута до нижнього правого з кроком в 64 пікселя і створюємо один екземпляр класу TextureRegion на кожен кадр Всі регіони далі передаються екземпляру класу Animation, кожен кадр якого триває 0,1 секунди

Далі завантажуємо моделі і текстури для корабля, загарбників, щитів і пострілів Це досить легко зробити за допомогою могутнього класу Obj Loader, чи не так Зверніть увагу, для текстур ми використовуємо mip-текстурирование

Нарешті, ми завантажуємо музику і звукові ефекти гри Ви можете бачити посилання на клас Settings, який є практично аналогічним однойменною класам ігор Великий стрибун і Містер Ном Цей метод буде викликатися всього один раз, коли наша гра почнеться, в класі Droidlnvaders, який ми реалізуємо через мить Як тільки всі активи будуть завантажені, ми можемо забути про більшість з них, крім текстур, які необхідно перезавантажувати в тому випадку, якщо гра припинена або відновлена

А це метод reload Ми будемо викликати його в методі Droidlnvaders onResume, тому текстури будуть перезавантажуватися, а відтворення музики буде відновлено

Нарешті, розглянемо допоміжний метод, наскільки спрощує відтворення звукових ефектів, який був присутній також в грі Великий стрибун Коли користувач відключає звук в настройках, ми просто нічого не програємо в цьому методі

ПРИМІТКА

Хоча цей метод, що завантажує активи і керуючий ними, досить легко реалізувати, він може розростися до неймовірних розмірів, якщо у вас буде багато активів Необхідно також знати, що іноді не всі активи можуть бути завантажені в память Для простих ігор на зразок тих, що ми розробили раніше в цій е, даний метод працює досить добре Я часто використовую його в своїх іграх Для великих ігор вам необхідно розробити більш ефективну стратегію управління активами

КЛАС SETTINGS

Як і у випадку з класом Assets, ми можемо використовувати повторно той код, який був написаний для попередніх ігор Тепер ми можемо зберігати додаткову булеву змінну, яка повідомляє нам про те, як саме користувач хоче керувати кораблем, за допомогою акселерометра або тачскрина Чи не буде також реалізована підтримка визначення кращих результатів, оскільки ми їх не відстежуємо Як вправа ми можете створити власний екран кращих результатів і збереження цих результатів на карту памяті У лістингу 122 показаний код нашого класу

Лістинг 122 Клас SettingsJava, наш старий знайомий

Ми зберігаємо інформацію про те, чи включений звук, а також про спосіб управління кораблем Налаштування будуть зберігатися у файлі з розширенням droidinvaders на карті памяті

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

Збереження знову ж досить нудне Ми просто зберігаємо всі, а якщо відбувається помилка, то мовчки її ігноруємо Це також непоганий ділянку для поліпшення – можливо, ви захочете дати користувачеві зрозуміти, що щось пішло не так

ОСНОВНА АКТИВНІСТЬ

Як звичайно, у нас є основна активність, яка успадковує від класу GLGame Вона відповідає за завантаження активів за допомогою виклику методу Assets 1oad при запуску, а також за призупинення та відновлення відтворення музики в тому випадку, якщо призупинено / відновлено активність В якості стартового екрана ми просто повертаємо MainMenuScreen, який незабаром також реалізуємо Єдине, про що слід памятати, – це визначення активності у файлі маніфесту Переконайтеся в тому, що встановлена ​​пейзажна орієнтація екрану Код класу приведений в лістингу 123

Лістинг 123 Клас Droidlnvadersjava основна активність

Точно те ж саме було в грі Великий стрибун У виклику методу getStartScreen ми повертаємо новий екземпляр класу MainMenuScreen, який напишемо далі У методі onSurf aceCreatedC ми переконуємося, що активи перезавантажувались, а в методі onPause ми припиняємо музику, якщо вона програється

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

ЕКРАН ГОЛОВНОГО МЕНЮ

Ми вже написали безліч простих екранів для попередніх ігор У грі Droid Invaders також є кілька подібних екранів Принцип завжди однаковий: надавайте кілька елементів користувальницького інтерфейсу, на яких можна клацнути і запустити перехід з одного екрана на інший, і відображуйте важливу інформацію На екрані головного меню знаходяться логотип гри, а також кнопки Play (Грати) і Settings (Настройки) (Що показано на рис 124) При дотику до однієї з цих кнопок спрацьовує перехід на екран GameScreen або Setti ngsScreen Код цього класу приведений в лістингу 124

Лістинг 124 Клас MainMenuScreenjava, екран головного меню

Як звичайно, нам необхідна камера для того, щоб встановити вікно перегляду і віртуальне цільове дозвіл, рівний 480 х 320 пікселів Ми використовуємо екземпляр класу SpriteBatcher для отрисовки елементів користувача інтерфейсу і фонового зображення Примірники класів Vector2 і Rectangl е допоможуть нам визначити, чи було торкання кнопки

У конструкторі встановлюємо камеру і екземпляр класу SpriteBatcher, нічого незвичайного Створюємо також екземпляри класів Vector2 і Rectangles, використовуючи задані позиції і розміри двох елементів на екрані, що має цільове дозвіл 480 х 320

У методі update отримуємо події дотику до екрану і перевіряємо їх тип Якщо зявилася подія типу touch-up, перетворюємо його реальні координати в координатну систему нашої камери Все, що нам залишається зробити, – перевірити, чи відбулося дотик до одного з двох прямокутників, що обмежують пункти меню Якщо один з них був зачеплений, відтворюємо звук клацання і переходимо на відповідний екран

Метод present виконує ті ж самі операції, що застосовувалися практично для всіх екранів ігри Великий стрибун

Ми очищаємо екран і встановлюємо проекційну матрицю за допомогою нашої камери Включаємо текстурирование, а потім миттєво отрісовиваємих фонове зображення за допомогою примірників класів SpriteBatcher і TextureRegion, визначених у класі Assets Елементи меню напівпрозорі, тому ми включаємо змішування перед їх отрисовкой

Інша частина класу складається з шаблонних методів, які не роблять нічого Завантаження текстур відбувається в активності Droidlnvaders, тому класу MainMenuScreen піклуватися більш нема про що

ЕКРАН НАСТРОЙОК

Вікно установок пропонує гравцеві змінити спосіб управління кораблем, а також включити або відключити звук На цьому екрані є три різних значка Дотик до значку, на якому зображена рука або нахилений телефон, включить відповідний спосіб управління кораблем Значок обраного способу буде мати золотий колір Для значка, керуючого звуком, ми будемо робити те ж саме, що і в попередніх іграх

Вибір користувача буде відображатися установкою відповідних значень булевих змінних в класі Settings Ми також переконуємося, що ці налаштування миттєво зберігаються на карту памяті при кожному їх зміну, за допомогою виклику методу Setti ngs saveO Код класу приведений в лістингу 125

Лістинг 125 Клас SettingsScreenJava, екран налаштувань

Як звичайно, у нас є камера і екземпляр класу SpriteBatcher, необхідний для отрисовки елементів користувальницького інтерфейсу і фонового зображення Для перевірки того, вироблялося чи дотик до кнопки, ми також зберігаємо вектор і прямокутники для трьох кнопок, розташованих на екрані

У конструкторі просто встановлюємо значення всіх членів класу Нічого незвичайного

Метод update отримує події дотику до екрану і перевіряє їх тип Якщо сталася подія touch-up, його координати перетворюються в координатну систему камери Потім перевіряється входження цих координат в прямокутники, що обмежують кнопки, і визначається, яка саме дія слід вжити

Метод render виконує ті ж самі дії, що й метод MainMenuScreen render Ми отрісовиваємих фонове зображення і кнопки, застосовуючи по необхідності текстурирование і змішування Грунтуючись на поточних настройках, визначаємо, який текстурний регіон буде використовуватися для отрисовки трьох кнопок налаштувань

Інша частина класу складається з декількох шаблонних методів, що не мають ніякої функціональності

Перед тим як створювати клас GameScreen, нам слід спочатку реалізувати логіку і отрисовку нашого світу Шаблон MVC прийде до нас на допомогу

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

*

*