Menu
CoddyTech

躲避:再玩一次

本课属于 Coddy Godot 学习旅程的“游戏规则”单元。第 29 课,共 29 课。

最后一步是让玩家在游戏结束后按 E 再玩一次。

你在尖刺房间里做过这件事。将 Main 的 process_mode 设为 Node.PROCESS_MODE_ALWAYS,这样即使游戏暂停,_process 也会运行。玩家、两个计时器和每个方块都在各自的场景中设为可暂停,因此它们仍会停止。按下按键后,取消暂停并重新加载:

func _process(delta):
	if lives == 0 and Input.is_action_just_pressed("action"):
		get_tree().paused = false
		get_tree().reload_current_scene()

重新加载会清除所有方块、分数和生命值。游戏结束时也显示 Hint 标签,让玩家知道要按哪个键。

challenge icon

挑战

困难

让玩家按 E 键重新开始游戏。

  1. 在 _ready() 中,将此节点的 process_mode 设置为 Node.PROCESS_MODE_ALWAYS。
  2. 游戏结束时,也显示 $HUD/Hint。
  3. 添加 _process():当 lives 为 0 且刚刚按下 action 时,取消游戏暂停并重新加载场景。

按“开始”,输掉游戏后按 E 键:新游戏会从 Score: 0 开始。然后按“检查”。

亲手试试

extends Node2D

var block_scene = preload("res://block.tscn")
var score = 0
var lives = 3

func _ready():
	$HUD/Score.text = "Score: %d" % score
	$HUD/Lives.text = "Lives: %d" % lives
	$SpawnTimer.timeout.connect(_on_spawn_timer_timeout)
	$ScoreTimer.timeout.connect(_on_score_timer_timeout)
	$Player.hurt.connect(_on_player_hurt)

func _on_spawn_timer_timeout():
	var block = block_scene.instantiate()
	block.position = Vector2(randf_range(40, 600), -30)
	add_child(block)

func _on_score_timer_timeout():
	score += 1
	$HUD/Score.text = "Score: %d" % score

func _on_player_hurt():
	lives -= 1
	$HUD/Lives.text = "Lives: %d" % lives
	if lives == 0:
		$HUD/GameOver.visible = true
		get_tree().paused = true
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

游戏规则中的所有课

自己练习: Godot 在线编辑器