Menu
CoddyTech

撞上管道

本课属于 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,因此暂停时它们都会停止。

challenge icon

挑战

困难

发生碰撞时结束游戏。

  1. 在 pipe.gd 中,添加 signal hit,在 _ready 中连接 body_entered,并在有物体进入时发出 hit。
  2. 在 flyer.gd 中,添加 signal crashed,并在 position.y 大于 306 时发出该信号。
  3. 在 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 在线编辑器