Menu
CoddyTech

Tabrak dan Mulai Ulang

Termasuk bagian Proyek dalam perjalanan Godot di Coddy. Pelajaran 18 dari 33.

Kapal terbang melewati bebatuan. Batu yang menyentuh kapal harus mengakhiri permainan. Di rock.gd, pada _on_body_entered, kapal adalah body yang bernama Ship. Batu mengirimkan sinyal hit_ship. main.gd menghubungkannya di spawn_rock dan mengakhiri permainan:

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

Boom adalah CPUParticles2D sekali pakai. Atur emitting ke true dan efeknya akan muncul sekali. Boom adalah child dari Main, yang selalu aktif, jadi efeknya tetap berjalan saat permainan dijeda.

Terakhir, buat Enter memulai permainan baru saat permainan dijeda, seperti di Breakout: batalkan jeda, lalu jalankan reload_current_scene(). Cara ini juga berfungsi setelah menang.

challenge icon

Tantangan

Sedang
  1. Di rock.gd, tambahkan signal hit_ship dan emit sinyal itu saat body adalah Ship.
  2. Di main.gd, hubungkan sinyal itu di spawn_rock ke _on_hit_ship. Fungsi ini menampilkan Game Over, menyembunyikan kapal, memunculkan ledakan $Boom di tempat kapal berada, lalu menjeda game.
  3. Saat dijeda, tekan Enter untuk melanjutkan game dan memuat ulang scene.

Coba sendiri

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 iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Proyek

Latihan sendiri: Playground Godot