Menu
CoddyTech
flag Ar iconالعربيةdown icon

قسّم الصخور

جزء من قسم المشاريع في رحلة Godot على Coddy. الدرس 16 من 33.

ينبغي أن تنقسم الصخرة الكبيرة إلى صخرتين صغيرتين. أعطِ كل صخرة قيمة size، بحيث تكون 2 للصخرة الكبيرة و1 للصغيرة. في _ready ضمن rock.gd، عيّن scale = Vector2.ONE * size * 0.5.

تُعلن الصخرة عن انكسارها باستخدام signal broken(rock) وbroken.emit(self). تشير self إلى الصخرة. أصبحت spawn_rock تستقبل الآن الحجم وتربط الإشارة:

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)

تصل الإشارة بينما يتحقق Godot من المناطق المتلامسة. تؤدي إضافة منطقة حينها إلى إيقاف اللعبة مع ظهور الرسالة لا يمكن تغيير هذه الحالة أثناء تفريغ الاستعلامات. تنفّذ call_deferred الاستدعاء في نهاية الإطار، حين يكون ذلك آمنًا.

challenge icon

التحدي

صعب
  1. في rock.gd، أضف var size = 2 وsignal broken(rock). اضبط المقياس انطلاقًا من size في _ready. أرسل الإشارة broken مع self عندما تصيب رصاصة الصخرة.
  2. في main.gd، اجعل spawn_rock(where, velocity, size) يضبط size للصخرة ويربط إشارتها broken. يكون حجم الصخور الأربع الأولى 2.
  3. عندما تتحطم صخرة حجمها 2، أنشئ هناك صخرتين حجمهما 1 باستخدام call_deferred. تكون سرعاتهما هي السرعة القديمة بعد تدويرها بمقدار 0.8 و-0.8، ثم ضربها في 1.5.

جرّب بنفسك

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)
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المشاريع

تدرّب بنفسك: Playground لـ Godot