Menu
CoddyTech

Перезапуск по нажатию клавиши

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

Эта строка удаляет сцену и заново загружает её из файла:

get_tree().reload_current_scene()

Новая игра начинается с тремя жизнями: игрок находится на зелёном квадрате, а надпись «Игра окончена» скрыта.

Main тоже приостановлен, поэтому его _process не видит нажатия клавиши. Установи для самого Main значение process_mode Node.PROCESS_MODE_ALWAYS. Дочерние узлы наследуют это значение, кроме игрока. В сцене для игрока задан режим Pausable, поэтому он всё равно останавливается.

Перезагрузка не снимает игру с паузы. Перед перезагрузкой установи get_tree().paused = false, иначе новая игра начнётся на паузе.

challenge icon

Задание

Легко

Позволь игроку снова нажать E, чтобы сыграть после окончания игры.

  1. В _ready() установи для собственного process_mode этого узла значение Node.PROCESS_MODE_ALWAYS (без $).
  2. В _process(), когда lives равно 0 и только что было нажато action, сними игру с паузы, затем перезагрузи сцену.

Нажми «Играть», потеряй три жизни и нажми E: начнётся новая игра с Lives: 3. Затем нажми «Проверить».

Попробуйте сами

extends Node2D

var lives = 3

func _ready():
	$HUD/Lives.text = "Lives: %d" % lives
	$Player.hurt.connect(_on_player_hurt)
	$Blink.timeout.connect(_on_blink_timeout)
	$Blink.process_mode = Node.PROCESS_MODE_ALWAYS

func _process(delta):
	pass

func _on_player_hurt():
	lives -= 1
	$HUD/Lives.text = "Lives: %d" % lives
	if lives == 0:
		$HUD/GameOver.visible = true
		$HUD/Hint.visible = true
		get_tree().paused = true

func _on_blink_timeout():
	if lives == 0:
		$HUD/GameOver.visible = not $HUD/GameOver.visible
quiz iconПроверьте себя

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

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

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