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.
Görev
ZorVurulan kayaları ikiye böl.
rock.gddosyasındasignal broken(rock)ekle ve bir mermi isabet ettiğinde,queue_free()öncesindebroken.emit(self)çağır.main.gddosyasında,spawn_rockiçinde her kayayıbrokensinyalini_on_rock_brokenişlevine bağla._on_rock_broken(rock)içinde, gösterildiği gibicall_deferredkullanarak 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
2Proje: Asteroit Nişancısı
Gemiyi DöndürMotoru ÇalıştırKendi başına pratik yap: Godot playground