- •Введение
- •Постановка задачи
- •Основные положение и аспекты разработки
- •Основная часть
- •Создание персонажа.
- •Создание игрового барьера, генератора игровых препятствий и земли.
- •Реализация стартового, прощального меню и счетчика очков.
- •Создание основной сцены игры, главного меню.
- •Приложение а
- •Приложение б
- •Приложение в
- •Приложение г
- •Приложение д
Создание игрового барьера, генератора игровых препятствий и земли.
Теперь создается препятствие для игрового персонажа – трубы, через которые должен он пролететь. Для этого в отдельной сцене создается узел Node, в который помещается три зоны – зона первой трубы с формой столкновения CollisionBody 2D, зона пролета между трубами, зона второй трубы с формой столкновения CollisionBody 2D. Результат создания труб можно увидеть на рисунке 6.
Рисунок 6 – Создание препятствия
Теперь выполняется написание скрипта для этого узла с такими методами (Приложение Б):
func _physics_process(delta)
func _on_pipe_body_entered(body)
func _on_area_of_score_body_exited(body)
Так как объект препятствие должно двигаться навстречу игроку, то ему задано отрицательное движение. Таким образом, объект движется в сторону игровому персонажа. При этом, если объект выходит за пределы экрана, то он старый объект генерируется новый, который воспроизводит эту же функцию. При этом старый объект удаляется, чтобы не нагружать оперативную память устройства.
Второй метод выполняется, если какой-либо объект входит в зону труб. Он проверяет, является ли этот объект игровым персонажем и если это так, то у игрового персонажа выполняется метод «die», что является концом игры.
Третий метод же выполняется, если какой-либо объект в зону пролета между трубами. Он проверяет, является ли этот объект игровым персонажем и если это так, то воспроизводится звуковой сигнал «score», означающий успешное преодоление скорости. Из этого метода посылается сигнал, который в дальнейшем посылает основной сцене сигнал для увеличения количества очков игрока, который является основным показателем результативности в игре.
Теперь, в отдельной сцене создается узел Timer со значением в полторы секунды. Основное предназначение этого узла заключается в том, чтобы менять вертикальное положение труб. Основное предназначение этого действия в том, чтобы пролет между трубами был разным, и игроку приходилось бы преодолевать препятствия другим способом – либо, взлетая резко вверх, стремясь попасть на верхний пролет, либо падая вниз, чтобы пройти нижний пролет.
Основными методами этого таймера являются (Приложение В):
func _ready()
func _on_Timer_timeout()
func spawn_barrier()
Первый метод выполняется сразу после начала игры. Он вызывает функцию randomize(), благодаря которой при каждом запуске игры будут заданы случайные числа, задающие координаты препятствия по оси Y. Благодаря этому, игра не будет казаться однообразной и скучной.
Второй метод выполняется по истечении таймера, то есть при прошествии полутора секунд. В нем же вызывается дочерний объект «barrier», который был создан ранее. Этому объекту задается величина в пределах определенного значения по оси Y.
Также создается отдельная сцена земли StaticBody 2D. К нему подсоединяется спрайт с текстурой земли, формой столкновения CollisionBody2D; зона смерти, коснувшись которой игрок погибает; анимацией, которая будет воспроизводиться до того момента, пока игрок не умрет. В анимации объект двигается влево и до той же позиции, чтобы анимация земли проходила бесшовно. Объект земли можно увидеть на рисунке 7. Методы этого узла прописаны в основной сцене.
Рисунок 7 - Земля
