Столкновение с трубами
Часть раздела Проекты путешествия по 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, поэтому пауза останавливает их все.
Задание
СложноЗавершайте игру при столкновении.
- В
pipe.gdдобавьтеsignal hit, подключитеbody_enteredв_readyи отправляйте сигналhit, когда в область входит тело. - В
flyer.gdдобавьтеsignal crashedи отправляйте его, когдаposition.yпревышает306. - В
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)
Все уроки раздела Проекты
3Проект: Летающий птенец
Гравитация для птенцаВзмах крыльямиПотренируйтесь самостоятельно: Песочница Godot