Menu
CoddyTech

الاصطدام وإعادة التشغيل

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

تطير السفينة بين الصخور. يجب أن تنهي الصخرة التي تلامس السفينة اللعبة. في rock.gd، داخل _on_body_entered، تكون السفينة هي الجسم المسمى Ship. تُصدر الصخرة إشارة hit_ship. تربطها main.gd في spawn_rock وتنهي اللعبة:

func _on_hit_ship():
	$HUD/Message.text = "Game Over"
	$Ship.hide()
	$Boom.position = $Ship.position
	$Boom.emitting = true
	get_tree().paused = true

Boom هو CPUParticles2D يعمل لمرة واحدة. عيّن emitting إلى true، وسيُصدر دفعة واحدة. وهو عنصر فرعي لـ Main، الذي يكون مضبوطًا على Always، لذا يعمل أثناء إيقاف اللعبة مؤقتًا.

وأخيرًا، اجعل Enter يبدأ لعبة جديدة أثناء الإيقاف المؤقت، كما في Breakout: ألغِ الإيقاف المؤقت، ثم استخدم reload_current_scene(). ويعمل ذلك أيضًا بعد الفوز.

challenge icon

التحدي

متوسط

أنهِ اللعبة عندما يصطدم صخر بالسفينة.

  1. في rock.gd، أضف signal hit_ship وأصدر الإشارة عندما يكون الجسم هو Ship.
  2. في main.gd، اربطها في spawn_rock بالدالة _on_hit_ship، التي تعرض Game Over، وتُخفي السفينة، وتُحدث انفجارًا عند موضع $Boom، ثم توقف اللعبة.
  3. أثناء الإيقاف المؤقت، اضغط على Enter لإلغاء الإيقاف المؤقت وإعادة تحميل المشهد.

اضغط على «العب» وحلّق نحو صخر: ستنفجر السفينة. ثم اضغط على «تحقق».

جرّب بنفسك

extends Node2D

const ROCK = preload("res://rock.tscn")

var score = 0
var rocks_left = 4

func _ready():
	for i in 4:
		spawn_rock(Vector2(randf_range(0, 640), 0), Vector2(randf_range(-90, 90), randf_range(40, 90)), 2)
	$HUD/Score.text = "Score: 0"

func spawn_rock(where, velocity, size):
	var rock = ROCK.instantiate()
	rock.position = where
	rock.velocity = velocity
	rock.size = size
	rock.broken.connect(_on_rock_broken)
	add_child(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)
		score += 20
		rocks_left += 2
	else:
		score += 50
	rocks_left -= 1
	$HUD/Score.text = "Score: %d" % score
	if rocks_left == 0:
		$HUD/Message.text = "You win!"
		get_tree().paused = true
quiz iconاختبر نفسك

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

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

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