撞上管道
本课属于 Coddy Godot 学习旅程的“项目”单元。第 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,在_ready中连接body_entered,并在有物体进入时发出hit。 - 在
flyer.gd中,添加signal crashed,并在position.y大于306时发出该信号。 - 在
main.gd中,将每个管道的hit和飞行器的crashed连接到_on_crash,该函数会显示Game Over并暂停游戏。
按“开始”,然后让角色落下:此时会显示 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 在线编辑器