КЛАС GAMESCREEN DROID INVADERS

&nbsp

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

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

Призупинена гра – в даному випадку потрібно малювати фонове зображення, мир і меню паузи, знову ж як це показано на рис 124

Закінчена гра – в цьому випадку отрісовивается практично те ж саме

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

Єдина цікава частина цього класу – обробка користувача введення

Ми хочемо, щоб гравець міг управляти кораблем за допомогою кнопок, розташованих на екрані, а також за допомогою акселерометра Ми можемо вважати поле Setti ngs touchEnabled, щоб визначити, як саме хоче це робити користувач Залежно від обраного методу введення інформації ми отрісовиваємих на екрані кнопки, також, можливо, зявляється необхідність передавати відповідні значення акселерометра методу Worl d updateC

Якщо відображаються кнопки, нам, звичайно ж, не потрібно використовувати показання акселерометра, замість цього в метод World update передаватиметься постійне штучне значення прискорення Воно повинне перебувати в проміжку від -10 (вліво) до 10 (вправо) Після недовгих експериментів я зупинився на значенні -5 для руху вліво і 5 для руху вправо за допомогою екранних кнопок

Останній цікавий фрагмент класу – це спосіб обєднання отрисовки тривимірного ігрового світу і двомірних елементів інтерфейсу користувача Погляньмо на код класу GameScreen, наведений у лістингу 1211

Лістинг 1211 Клас GameScreenJava, екран гри

Як звичайно, у нас є кілька констант, що кодують поточний стан екрана

Члени класу GameScreen також відносяться до логіки гри У нас є член, необхідний для відстежування поточного стану, камера, вектор для зберігання точки дотику, екземпляр класу SpriteBatcher, необхідний для отрисовки двомірних елементів користувальницького інтерфейсу, екземпляри класів World, Worl dLi stener і Worl dRenderer (які ми дуже скоро напишемо), а також кілька примірників класу Rectangle, необхідних для перевірки того, чи відбувалося дотик до елементів інтерфейсу користувача На додаток три змінних типу int відстежують залишився кількість життів, хвилі загарбників і рахунок, тому нам не потрібно щоразу оновлювати параметр scoreString, а це дозволяє знизити активність збирача сміття Нарешті, є параметр FPSCounter, необхідний для того, щоб визначати продуктивність гри

У конструкторі просто встановлюємо значення всіх членів класу Примірник класу World Listener відповідає за відтворення коректного звуку в разі появи події в ігровому світі Інша частина конструктора ідентична аналогічного методу ігри Великий стрибун, вона лише кілька адаптована для розрізняються місцями елементів інтерфейсу користувача

Метод updateC передає управління оновленням одному з трьох методів залежно від поточного стану екрану

Метод updatePausedO проходить в циклі по всім доступним подіям дотику до екрану і перевіряє, чи було здійснено натискання одного з двох пунктів меню (Resume (Продовжити) або Quit (Вийти)) У кожному випадку відтворюємо звук клацання Нічого нового

Метод updateRunni ng відповідає за дві дії: перевірка натискання кнопки паузи і відповідна реакція, а також оновлення світу на підставі дій користувача Перша частина цього пазлу досить тривіальна, тому розглянемо механізм оновлення світу Як ви можете бачити, ми передаємо розрахунок значення прискорення методу, який називається calculatelnput AccelerationO Як тільки світ оновився, ми перевіряємо, чи змінилися три стани (життя, хвилі і рахунок), і відповідно оновлюємо параметр scoreString Нарешті, перевіряємо, чи закінчилася гра, якщо це так, то виконується перехід в стан GameOver

Метод calcul atelnput Accel eration – це те місце, де насправді обробляється введення даних користувачем Якщо був включений режим управління кораблем за допомогою дотиків, ми перевіряємо, чи були натиснуті кнопки переміщення вліво або вправо і відповідно встановлюємо значення прискорення рівним від -5 до +5 Якщо використовується акселерометр, ми просто повертаємо його поточне значення по осі у (памятаєте, гра працює тільки в пейзажному режимі)

Метод update GameOver також тривіальний і просто перевіряє, чи відбулося дотик до екрану Якщо так, то просто переходимо на екран MainMenuScreen

Метод presentO досить простий Як звичайно, починаємо з очищення колірного буфера Ми також очищаємо z-буфер, оскільки збираємося отрісовать кілька 3D-обєктів, для чого нам знадобиться z-тестування Далі встановлюємо матрицю проекції, завдяки чому зможемо відмальовувати двомірне фонове зображення так само, як і в класах MainMenuScreen або SettingsScreen Як тільки все буде готове, ми накажемо класу Worl dRenderer отрісовать ігровий світ Нарешті, передаємо отрисовку елементів користувальницького інтерфейсу в залежності від поточного стану Зверніть увагу, що метод World Renderer render відповідає за установку всього необхідного для відтворення тривимірного світу

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

Метод presentRunni ng також досить прямолінійний Спочатку ми отрісовиваємих рядок scoreStri ng Якщо був включений режим введення даних за допомогою дотиків до екрану, то далі отрісовиваємих кнопки переміщення вліво і вправо Наприкінці методу отрісовиваємих кнопку стрільби і скидаємо всі стани OpenGL ES, які ми змінили (текстурирование і змішування)

Метод present GameOverO – це просто отрисовка рядків і елементів інтерфейсу користувача

Нарешті, розглянемо метод pause, який просто переводить ігровий екран GameScreen в призупинене стан

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

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

*

*