Menu
CoddyTech

충돌 후 다시 시작하기

Coddy Godot 여정의 프로젝트 섹션에 포함된 레슨. 36개 중 21번째.

우주선은 바위 사이를 날아갑니다. 우주선에 닿는 바위는 게임을 끝내야 합니다. rock.gd의 _on_body_entered에서 우주선은 Ship이라는 이름의 몸체입니다. 바위는 hit_ship 신호를 내보냅니다. main.gd는 spawn_rock에서 이 신호를 연결하고 게임을 끝냅니다.

func _on_hit_ship():
	$HUD/Message.text = "Game Over"
	$Ship.hide()
	$Boom.position = $Ship.position
	$Boom.emitting = true
	get_tree().paused = true

Boom은 한 번만 실행되는 CPUParticles2D입니다. emitting을 true로 설정하면 한 번 폭발합니다. 이것은 Always인 Main의 자식이므로 게임이 일시 정지된 동안에도 재생됩니다.

마지막으로, Breakout에서처럼 일시 정지 중에 Enter를 눌러 새 게임을 시작하도록 합니다. 일시 정지를 해제한 다음 reload_current_scene()을 실행합니다. 승리한 뒤에도 작동합니다.

challenge icon

챌린지

중급

바위가 우주선에 부딪히면 게임을 끝내세요.

  1. rock.gd에서 signal hit_ship를 추가하고, 바디가 Ship일 때 신호를 발생시키세요.
  2. main.gd의 spawn_rock에서 신호를 _on_hit_ship에 연결하세요. 이 함수는 Game Over를 표시하고, 우주선을 숨기고, 우주선이 있던 위치에서 $Boom을 폭발시키고 일시 정지합니다.
  3. 일시 정지 중에 Enter를 누르면 일시 정지가 해제되고 장면이 다시 로드됩니다.

‘플레이’를 누르고 바위에 부딪혀 보세요. 우주선이 폭발합니다. 그런 다음 ‘확인’을 누르세요.

직접 해보기

extends Node2D

const ROCK = preload("res://rock.tscn")

var score = 0
var rocks_left = 4

func _ready():
	for i in 4:
		spawn_rock(Vector2(randf_range(0, 640), 0), Vector2(randf_range(-90, 90), randf_range(40, 90)), 2)
	$HUD/Score.text = "Score: 0"

func spawn_rock(where, velocity, size):
	var rock = ROCK.instantiate()
	rock.position = where
	rock.velocity = velocity
	rock.size = size
	rock.broken.connect(_on_rock_broken)
	add_child(rock)

func _on_rock_broken(rock):
	if rock.size == 2:
		spawn_rock.call_deferred(rock.position, rock.velocity.rotated(0.8) * 1.5, 1)
		spawn_rock.call_deferred(rock.position, rock.velocity.rotated(-0.8) * 1.5, 1)
		score += 20
		rocks_left += 2
	else:
		score += 50
	rocks_left -= 1
	$HUD/Score.text = "Score: %d" % score
	if rocks_left == 0:
		$HUD/Message.text = "You win!"
		get_tree().paused = true
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

프로젝트의 모든 레슨

직접 연습해 보세요: Godot 플레이그라운드