Menu
CoddyTech

Kayaları Parçala

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

Vurulan bir kaya ikiye bölünmelidir. Kaya, signal broken(rock) ve broken.emit(self) ile kırıldığını bildirir. self kayadır; bu nedenle dinleyici kayanın nerede olduğunu ve nasıl hareket ettiğini bilir.

spawn_rock, her yeni kayayı rock.broken.connect(_on_rock_broken) ile bağlar ve bu işlev, birbirinden farklı yönlere döndürülmüş iki kaya oluşturur:

func _on_rock_broken(rock):
	spawn_rock.call_deferred(rock.position, rock.velocity.rotated(0.8) * 1.5)
	spawn_rock.call_deferred(rock.position, rock.velocity.rotated(-0.8) * 1.5)

Sinyal, Godot hangi alanların birbirine dokunduğunu denetlerken gelir. O sırada bir alan eklemek, oyunu Sorgular işlenirken bu durum değiştirilemiyor hatasıyla durdurur. call_deferred çağrıyı kare sonunda, bunun güvenli olduğu zamanda çalıştırır.

Şimdilik her kaya bölünüyor, bu yüzden kayalar hiç tükenmiyor. Boyutlar bir sonraki adımda ele alınacak.

challenge icon

Görev

Zor

Vurulan kayaları ikiye böl.

  1. rock.gd dosyasında signal broken(rock) ekle ve bir mermi isabet ettiğinde, queue_free() öncesinde broken.emit(self) çağır.
  2. main.gd dosyasında, spawn_rock içinde her kayayı broken sinyalini _on_rock_broken işlevine bağla.
  3. _on_rock_broken(rock) içinde, gösterildiği gibi call_deferred kullanarak iki kaya oluştur.

“Oyna” düğmesine bas ve bir kayaya ateş et: iki kaya birbirinden uzaklaşarak uçar. Ardından “Kontrol et” düğmesine bas.

Kendin dene

extends Node2D

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

func _ready():
	for i in 4:
		spawn_rock(Vector2(randf_range(0, 640), 0), Vector2(randf_range(-90, 90), randf_range(40, 90)))

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

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

Kendi başına pratik yap: Godot playground