اصطدم وأعد التشغيل
جزء من قسم المشاريع في رحلة Godot على Coddy. الدرس 18 من 33.
تطير السفينة بين الصخور. يجب أن تنتهي اللعبة عندما يصطدم صخر بالسفينة. في 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 = trueBoom هو عنصر CPUParticles2D يعمل مرة واحدة. اضبط emitting على true، وسيُصدر دفعة واحدة. وهو عنصر فرعي من Main، الذي يعمل دائمًا، لذا فإنه يعمل أثناء إيقاف اللعبة مؤقتًا.
أخيرًا، اجعل Enter يبدأ لعبة جديدة أثناء الإيقاف المؤقت، كما في Breakout: ألغِ الإيقاف المؤقت، ثم استخدم reload_current_scene(). ويعمل هذا أيضًا بعد الفوز.
التحدي
متوسط- في
rock.gd، أضفsignal hit_shipوأصدره عندما يكون الجسم هوShip. - في
main.gd، اربطه فيspawn_rockبـ_on_hit_ship. يعرضGame Over، ويخفي السفينة، ويُحدث انفجارًا عند$Boomفي موضع السفينة، ويوقف اللعبة مؤقتًا. - أثناء الإيقاف المؤقت، يؤدي الضغط على 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
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المشاريع
2مشروع: مطلق النار على الكويكبات
أدر السفينةأشعل المحركتدرّب بنفسك: Playground لـ Godot