Kayaları Parçala
Coddy'nin Godot Journey'sinin Projeler bölümünün bir parçası. Ders 16 / 33.
Büyük bir kaya iki küçük kayaya bölünmelidir. Her kayaya bir size ver; büyük kayalar için 2, küçük kayalar için 1. rock.gd dosyasındaki _ready işlevinde scale = Vector2.ONE * size * 0.5 ayarını yap.
Kaya, signal broken(rock) ve broken.emit(self) ile parçalandığını bildirir. self kayadır. spawn_rock artık bir boyut alır ve sinyali bağlar:
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)Sinyal, Godot hangi alanların birbirine dokunduğunu kontrol ederken gelir. O sırada bir alan eklemek oyunu Can't change this state while flushing queries hatasıyla durdurur. call_deferred çağrıyı, bunun güvenli olduğu kare sonuna erteler.
Görev
Zorrock.gdiçindevar size = 2vesignal broken(rock)ekleyin._readyiçinde ölçeğisizedeğerinden ayarlayın. Bir mermi isabet ettiğindeselfilebrokensinyalini gönderin.main.gdiçindespawn_rock(where, velocity, size)fonksiyonunun kayanınsizedeğerini ayarlamasını vebrokensinyalini bağlamasını sağlayın. İlk 4 kayanın boyutu 2 olsun.- Boyutu 2 olan bir kaya kırıldığında, orada
call_deferredile boyutu 1 olan iki kaya oluşturun. Hızları, eski hızın0.8ve-0.8kadar döndürülüp1.5ile çarpılmış hâlidir.
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)
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
2Proje: Asteroit Avcısı
Gemiyi DöndürMotoru ÇalıştırKendi başına pratik yap: Godot playground