Java Android. Урок 19 (“Делаем игру Salvador”)

Продолжаем практическое изучение Java Android на примере игры Salvador. На этом уроке и в его домашнем задании будем делать следующее, т.е. заставку к игре:

Сделать её можно используя тысячи методов, но нужно было что-то выбрать и я решил попробовать тот, который ещё ни разу не проверял.

Для начала добавим переменную roundTime класса GameEngine, которая будет фиксировать прошедшее в раунде время. Также добавим переменную mainGameLogic, которая будет определять логику игры, т.к. что сейчас у нас на экране, игровой процесс, заставка или ещё что-то иное:

Объект GameObject теперь хранит много самостоятельной информации общей для всех его дочерних классов, а некоторые функции и переменные из дочерних вынесены в этот:

Класс Alien теперь умеет работать с несколькими подтипами:

Сам метод поведения Alien тоже изменился:

Начальная инициализация объектов теперь начинается с группировки корабля игрока, а логика игры – заставка:

Заметьте, теперь информация о будущем объекте после группировки передаётся прямо в конструктор GroupingParts.

Основной код метода 1/25 секунды тоже поменялся, и чтобы уже определиться, переименовал его в mainStrob():

тут дальше следует череда разного рода действий заставки возникающих как только время раунда достигает нового значения 2000 мс, 3000 мс и т.д., тут то группируется корабль игрока, потом группируется инопланетянин, через 4 сек это стреляет в того ракетой, через 4.4 сек наш стреляет бластером в этого и т.д.

Ключевой код работы с объектами теперь упростился, т.к. часть функционала взял на себя GameObject и его дочерние классы:

Теперь посмотрим зачем в сначала вводил переменную позиция по X корабля игрока на экране. До этого момента это была лишняя переменная, т.к. корабль всегда находился по горизонтали в центре, так спрашивается, а зачем тогда она нужна. Нужна она вот для чего:

Правильно, чтобы расширить возможности игрового пространства. Когда корабль игрока летит по рельефу вправо, то его корабль отодвигается влево, чтобы улучшить реакцию на инопланетян появляющихся по ходу движения. При этом и игровая ситуация для манёвров более предсказуема. Как можно заметить, это не влияет на реальную скорость, т.к. определяет только визуальное представление, но не координату в игровом пространстве. Однако, учитывая как у нас организован функционал, сделать это оказалось крайне просто:

А в стробе просто делаю так:

“300” – это та самая граница в которую корабль упирается слева или справа.

onScreenVX – определяет с какой скоростью он будет перемещаться по экрану в эту граничную область.

Задание по уроку:

1. Сделайте другие подюниты класса Alien

2. Сделайте так, чтобы заставка циклически повторялась, а по клику завершалась и начиналась игра

3. Добавьте на отображением суммы бонусов отображение времени раунда.

Если всё получилось как нужно – молодцы! Если нет, давайте разберёмся что не так.

Урок 18 Урок 20

Добавить комментарий