Menu
CoddyTech
flag Ru iconРусскийdown icon

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

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

Столкновение с трубой или землёй должно завершать игру. И то и другое приводит к одной функции в 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.

Летун, трубы и таймер можно приостанавливать, поэтому пауза останавливает их все.

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)
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

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

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