Menu
CoddyTech
flag He iconעבריתdown icon

התרסקות והתחלה מחדש

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

הספינה טסה בין סלעים. סלע שנוגע בספינה אמור לסיים את המשחק. בתוך _on_body_entered של rock.gd, הספינה היא הגוף ששמו 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בחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

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

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