Главная » Программирование игр под Android » GameObject, DynamicGameObject и Cannon – РАЗРАБОТКА ИГР ДЛЯ ОС ANDROID

0

Начнем со статичного, или базового, случая в листинге 8.7.

Листинг 8.7. GameObject.Java, статичный игровой объект с позицией и границами

Каждый объект в нашей игре имеет позицию, которая совпадает с его центром. Мы также разрешаем каждому объекту иметь одну ограничивающую фигуру – в данном случае прямоугольник. В конструкторе определим позицию и ограничивающую фигуру (которая сосредоточена вокруг центра объекта) в соответствии с его параметрами.

Для динамических объектов, то есть объектов, которые двигаются, нам также необходимо отслеживать скорость и ускорение (если они ускоряются сами по себе, например мотор или двигатель). В листинге 8.8 показан код для класса DynamicGameObject.

Листинг 8.8. DynamicGameObject.java: расширение GameObject при добавлении вектора скорости и ускорения

Мы дополняем класс GameOb ject, чтобы он наследовал члены позиции и границ. Дополнительно создаем векторы скорости и ускорения. Новый динамический игровой объект имеет нулевые скорость и ускорение после инициализации.

В нашем примере с пушечным ядром есть пушка, ядро и мишени. Пушечное ядро является Dynami cGameObject, поскольку оно движется согласно нашей простой физической модели. Мишени статичны и могут быть реализованы с использованием стандартного GameOb ject. Сама пушка может быть реализована с помощью класса GameOb ject. Из класса GameOb ject мы произведем класс Cannon и добавим поле, содержащее текущий угол наклона пушки. Код приведен в листинге 8.9.

Листинг 8.9. Cannon.java: расширение GameObject при введении Angle

Так мы красиво инкапсулируем все данные, необходимые для представления объекта в нашем мире. Каждый раз, когда нам нужен объект определенного вида, например пушка, мы можем просто извлекать его из GameObject, если это статический объект, или из Dynami cGameObject, если.у него есть скорость и ускорение.

ПРИМЕЧАНИЕ

Переизбыток расширений классов может привести к лишней головной боли и некрасивой архитектуре кода. Не используйте дополнения только ради того, чтобы использовать. Простая иерархия классов, которую мы применяли выше, не беда, но не стоит позволять ей становиться глубже (например, не стоит дополнять класс Cannon). Существуют альтернативные представления игровых объектов, которые позволяют избавиться от всего наследования благодаря правильной композиции. Однако для наших целей и простого дополнения более чем достаточно. Если вы хотите больше узнать о других способах представления, поищите в Интернете статьи о составных объектах, или примесях.

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

По теме:

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