Menu
CoddyTech

פצלו את הסלעים

חלק מהיחידה פרויקטים במסלול ה-Godot של Coddy. שיעור 18 מתוך 36.

סלע שנפגע מירייה אמור להתפצל לשניים. הסלע מדווח שהוא נשבר באמצעות signal broken(rock) ו-broken.emit(self). self הוא הסלע, ולכן המאזין יודע איפה הוא היה וכיצד הוא נע.

spawn_rock מחברת כל סלע חדש באמצעות rock.broken.connect(_on_rock_broken), והפונקציה הזאת יוצרת שני סלעים שפונים לכיוונים שונים:

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)

האות מגיע בזמן ש-Godot בודק אילו אזורים נוגעים זה בזה. הוספת אזור באותו רגע עוצרת את המשחק עם Can't change this state while flushing queries. call_deferred מפעילה את הקריאה בסוף הפריים, כשבטוח לעשות זאת.

לעת עתה כל סלע מתפצל, ולכן הם לעולם לא ייגמרו. בגדלים נעסוק בהמשך.

challenge icon

אתגר

קשה

גרום לסלעים שנורים להתפצל לשניים.

  1. ב־rock.gd, הוסף signal broken(rock) וקרא ל־broken.emit(self) כשקליע פוגע, לפני queue_free().
  2. ב־main.gd, חבר את broken של כל סלע אל _on_rock_broken בתוך spawn_rock.
  3. בתוך _on_rock_broken(rock), צור שני סלעים כפי שמוצג, באמצעות call_deferred.

לחץ על "שחק" וירה בסלע: שני סלעים עפים לכיוונים מנוגדים. לאחר מכן לחץ על "בדיקה".

נסו בעצמכם

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)

כל השיעורים ביחידה פרויקטים

תרגלו בעצמכם: Godot אונליין