Menu
CoddyTech

Столкновение с трубами

Часть раздела Проекты путешествия по Godot на Coddy. Урок 26 из 36.

Столкновение с трубой или землёй должно завершать игру. И то и другое приводит к одной функции в main.gd:

func _on_crash():
	$HUD/Message.text = "Game Over"
	get_tree().paused = true

Труба. Труба — это Area2D с двумя фигурами: верхней и нижней половинами. У промежутка нет фигуры. В pipe.gd подключи body_entered и отправь сигнал hit. В main.gd подключается сигнал hit каждой новой трубы до её добавления.

Земля. Её верх находится на y = 318. Край летуна находится в 12 пикселях от его середины, поэтому он касается земли, когда position.y превышает 306. Тогда flyer.gd отправляет сигнал crashed.

Для летуна, труб и таймера установлен режим Pausable, поэтому пауза останавливает их все.

challenge icon

Задание

Сложно

Завершайте игру при столкновении.

  1. В pipe.gd добавьте signal hit, подключите body_entered в _ready и отправляйте сигнал hit, когда в область входит тело.
  2. В flyer.gd добавьте signal crashed и отправляйте его, когда position.y превышает 306.
  3. В main.gd подключите сигнал hit каждой трубы и сигнал crashed летуна к _on_crash, которая показывает Game Over и ставит игру на паузу.

Нажмите «Играть» и падайте: появится сообщение об окончании игры. Затем нажмите «Проверить».

Попробуйте сами

extends Node2D

const PIPE = preload("res://pipe.tscn")

func _ready():
	$PipeTimer.timeout.connect(_on_pipe_timer_timeout)

func _on_pipe_timer_timeout():
	var pipe = PIPE.instantiate()
	pipe.position = Vector2(700, randf_range(100, 250))
	$Pipes.add_child(pipe)

Все уроки раздела Проекты

Потренируйтесь самостоятельно: Песочница Godot