Çarpışma ve Yeniden Başlat
Coddy'nin Godot Journey'sinin Projeler bölümünün bir parçası. Ders 18 / 33.
Gemi kayaların arasından uçar. Gemiye dokunan bir kaya oyunu bitirmelidir. rock.gd dosyasındaki _on_body_entered içinde gemi, Ship adlı gövdedir. Kaya, hit_ship sinyalini gönderir. main.gd bu sinyali spawn_rock içinde bağlar ve oyunu bitirir:
func _on_hit_ship():
$HUD/Message.text = "Game Over"
$Ship.hide()
$Boom.position = $Ship.position
$Boom.emitting = true
get_tree().paused = trueBoom, tek seferlik bir CPUParticles2D düğümüdür. emitting özelliğini true olarak ayarladığınızda bir kez patlar. Main'in alt düğümüdür ve Main Always olduğundan oyun duraklatılmışken de çalışır.
Son olarak, Breakout'taki gibi, oyun duraklatılmışken Enter tuşuyla yeni bir oyun başlatın: duraklatmayı kaldırın, ardından reload_current_scene() çağrısını yapın. Bu, kazandıktan sonra da çalışır.
Görev
Ortarock.gddosyasınasignal hit_shipekleyin ve gövdeShipolduğunda sinyali yayınlayın.main.gddosyasında bunuspawn_rockiçinde_on_hit_shipişlevine bağlayın. Bu,Game Overmesajını gösterir, gemiyi gizler, geminin bulunduğu yerde$Boomefektini patlatır ve oyunu duraklatır.- Oyun duraklatılmışken Enter tuşuna basmak duraklatmayı kaldırır ve sahneyi yeniden yükler.
Kendin dene
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
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Projeler bölümündeki tüm dersler
2Proje: Asteroit Avcısı
Gemiyi DöndürMotoru ÇalıştırKendi başına pratik yap: Godot playground