Menu
CoddyTech

Çarpışma ve Yeniden Başlat

Coddy'nin Godot Journey'sinin Projeler bölümünün bir parçası. Ders 18 / 33.

Gemi kayaların arasından uçar. Gemiye dokunan bir kaya oyunu bitirmelidir. rock.gd dosyasındaki _on_body_entered içinde gemi, Ship adlı gövdedir. Kaya, hit_ship sinyalini gönderir. main.gd bu sinyali spawn_rock içinde bağlar ve oyunu bitirir:

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

Boom, tek seferlik bir CPUParticles2D düğümüdür. emitting özelliğini true olarak ayarladığınızda bir kez patlar. Main'in alt düğümüdür ve Main Always olduğundan oyun duraklatılmışken de çalışır.

Son olarak, Breakout'taki gibi, oyun duraklatılmışken Enter tuşuyla yeni bir oyun başlatın: duraklatmayı kaldırın, ardından reload_current_scene() çağrısını yapın. Bu, kazandıktan sonra da çalışır.

challenge icon

Görev

Orta
  1. rock.gd dosyasına signal hit_ship ekleyin ve gövde Ship olduğunda sinyali yayınlayın.
  2. main.gd dosyasında bunu spawn_rock içinde _on_hit_ship işlevine bağlayın. Bu, Game Over mesajını gösterir, gemiyi gizler, geminin bulunduğu yerde $Boom efektini patlatır ve oyunu duraklatır.
  3. Oyun duraklatılmışken Enter tuşuna basmak duraklatmayı kaldırır ve sahneyi yeniden yükler.

Kendin dene

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 iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Projeler bölümündeki tüm dersler

Kendi başına pratik yap: Godot playground