Score et victoire
Fait partie de la section Projets du Journey Godot de Coddy. Leçon 20 sur 36.
Un gros rocher vaut 20 points et un petit, 50. _on_rock_broken connaît la taille, alors il ajoute les points et met à jour $HUD/Score.
Tu gagnes quand il ne reste plus de rochers. Commence le décompte à 4. Enlève-en un pour chaque rocher brisé et ajoute-en deux quand un gros se divise :
if rock.size == 2:
rocks_left += 2
rocks_left -= 1
if rocks_left == 0:
$HUD/Message.text = "You win!"
get_tree().paused = trueCompte ici les deux nouveaux rochers, pas dans spawn_rock. spawn_rock s’exécute à la fin de la frame, donc le décompte atteindrait zéro avant que les deux derniers petits rochers existent.
Les rochers, les balles et le vaisseau sont Pausable. Main est Always.
Défi
DifficileMarque des points en détruisant les rochers et gagne quand ils ont tous disparu.
- Dans
main.gd, ajoutevar score = 0et afficheScore: 0. - Un gros rocher détruit rapporte 20 points, un petit 50. Affiche le score.
- Ajoute
var rocks_left = 4. Retire-en un par rocher détruit et ajoute-en deux quand un gros rocher se divise. À 0, afficheYou win!et mets le jeu en pause.
Appuie sur « Jouer » et détruis tous les rochers : le message You win! s'affiche. Puis appuie sur « Vérifier ».
Essayez vous-même
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)), 2)
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)
Toutes les leçons de Projets
Entraînez-vous par vous-même : Playground Godot