Menu
CoddyTech

Büyük ve Küçük Kayalar

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

Yalnızca büyük kayalar bölünmeli. Her kayaya bir size ver; büyük kayalar için 2, küçükler için 1 olsun ve rock.gd içindeki _ready fonksiyonunda bu değere göre çiz: scale = Vector2.ONE * size * 0.5.

spawn_rock da boyutu alır. rock.size değerini önce add_child(rock) çağrısından önce ayarla: _ready, add_child içinde çalışır; bu yüzden boyutu bundan sonra ayarlarsan ölçek için çok geç kalmış olursun.

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)

Küçük bir kaya yalnızca parçalanır.

challenge icon

Görev

Zor

Büyük kayalar ikiye ayrılsın, küçük kayalar kırılsın.

  1. rock.gd dosyasına var size = 2 ekle ve _ready içinde scale = Vector2.ONE * size * 0.5 ayarla.
  2. spawn_rock işlevine size ekle ve add_child çağrısından önce rock.size ayarla. İlk 4 kayaya 2 ver.
  3. Yalnızca rock.size == 2 olduğunda, boyutları 1 olan iki kayaya ayır.

“Oyna” düğmesine bas ve ateş et: büyük kayalar ikiye ayrılır, küçükler kırılır. 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
	rock.broken.connect(_on_rock_broken)
	add_child(rock)

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)

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

Kendi başına pratik yap: Godot playground