Up to date
This page is up to date for Godot 4.3.
If you still find outdated information, please open an issue.
Heads up display (HUD)
La dernière pièce dont notre jeu a besoin est une Interface Utilisateur (IU), User Interface (UI) en anglais, pour afficher des éléments comme le score, un message "game over" et un bouton de redémarrage.
Créez une nouvelle scène, cliquez sur le bouton "Autre nœud" et ajoutez un nœud CanvasLayer nommé HUD. "HUD"» signifie « Heads-Up Display (affichage tête haute) », un affichage d'informations qui apparaît en superposition au-dessus de la vue du jeu.
Le nœud CanvasLayer nous permet de dessiner nos éléments de l'interface utilisateur sur un calque au-dessus du reste du jeu, de sorte que les informations qu'il affiche ne sont couvertes par aucun élément du jeu comme le joueur ou les monstres.
Le HUD doit afficher les informations suivantes :
Le score, modifié par
ScoreTimer.Un message, tel que "Game Over" ou "Get Ready"
Un bouton "Démarrer" pour commencer le jeu.
Le nœud de base pour les éléments de l'interface utilisateur est Control. Pour créer notre interface utilisateur, nous utiliserons deux types de nœuds Control : Label et Button.
Créez les éléments suivants en tant qu'enfants du nœud HUD :
Un Label nommé
ScoreLabel.Un Label nommé
Message.Un Button nommé
StartButton.Un Timer nommé
MessageTimer.
Cliquez sur le ScoreLabel et dans l'inspecteur, entrez un nombre dans le champ Text. La police par défaut pour les nœuds Control est petite et ne s'ajuste pas correctement. Il existe un fichier de police inclus dans les ressources du jeu appelé "Xolonium-Regular.ttf". Pour utiliser cette police, procédez comme suit :
Sous "Thèmes de remplacement > Polices", choisissez "Charger" et sélectionnez le fichier "Xolonium-Regular.ttf".
La taille de la police est encore trop petite, augmentez-la à 64 sous "Remplacements de thème > Tailles de police". Une fois que vous avez fait cela avec ScoreLabel, répétez les modifications pour les nœuds Message et StartButton.
Note
Ancres : les nœuds Control ont une position et une taille, mais ils ont également des ancres. Les ancres définissent l'origine, c'est-à-dire le point de référence des arêtes du nœud.
Disposez les nœuds comme affiché ci-dessous. Vous pouvez faire glisser les nœuds pour les placer manuellement ou, pour un placement plus précis, utiliser les "préréglages d'ancre".
ScoreLabel
Ajouter le texte
0.Réglez "Alignement horizontal" et "Alignement vertical" sur "Centre".
Choisissez le « Préréglage d'ancrage » « Centre Haut ».
Message
Ajoutez le texte :
Dodge the Creeps !.Réglez "Alignement horizontal" et "Alignement vertical" sur "Centre".
Réglez le "Autowrap Mode" sur
Word, sinon l'étiquette restera sur une seule ligne.Sous "Contrôle - Disposition/Transformation", définissez "Taille X" sur
480pour utiliser toute la largeur de l'écran.Choisir le "préréglage d'ancre"
Centre.
Connecter le HUD à Main
Maintenant que nous avons fini de créer la scène du HUD, sauvegardez-la et retournez à Main. Instanciez la scène HUD dans Main comme vous l'avez fait dans la scène Player. L'arbre de scène devrait ressembler à ça, alors assurez-vous de ne rien manquer :
Nous devons maintenant connecter la fonctionnalité HUD à notre script Main. Cela nécessite quelques ajouts à la scène Main :
Dans l'onglet Nœud, connectez le signal start_game du HUD à la fonction new_game() du nœud principal en cliquant sur le bouton "Choisir" dans la fenêtre "Connecter un signal" et en sélectionnant la méthode new_game() ou saisissez "new_game" sous "Méthode du récepteur" dans la fenêtre. Vérifiez que l'icône de connexion verte apparaît maintenant à côté de func new_game() dans le script.
Dans new_game(), mettez à jour l'affichage des scores et affichez le message "Get Ready" :
$HUD.update_score(score)
$HUD.show_message("Get Ready")
var hud = GetNode<HUD>("HUD");
hud.UpdateScore(_score);
hud.ShowMessage("Get Ready!");
Dans game_over() nous devons appeler la fonction HUD correspondante :
$HUD.show_game_over()
GetNode<HUD>("HUD").ShowGameOver();
Enfin, ajoutez ceci à on_score_timer_timeout() pour que l'affichage reste synchronisé avec le changement de score :
$HUD.update_score(score)
GetNode<HUD>("HUD").UpdateScore(_score);
Avertissement
N'oubliez pas de supprimer l'appel à new_game() dans _ready() si vous ne l'avez pas déjà fait, sinon votre jeu démarrera automatiquement.
Now you're ready to play! Click the "Play the Project" button.
Supprimer les vieux Creeps
Si vous jouez jusqu'au "Game Over" et que vous commencez une nouvelle partie immédiatement, les monstres de la partie précédente sont toujours à l'écran. Il vaudrait mieux qu'ils disparaissent tous au début d'une nouvelle partie. Il nous faut juste un moyen de dire à tous les monstres de se supprimer. Nous pouvons le faire grâce à la fonction "groupe".
In the Mob scene, select the root node and click the "Node" tab next to the
Inspector (the same place where you find the node's signals). Next to "Signals",
click "Groups" to open the group overview
and the "+" button to open the "Create New Group" dialog.
Name the group mobs and click "ok" to add a new scene group.
Now all mobs will be in the "mobs" group.
We can then add the following line to the new_game() function in Main:
get_tree().call_group("mobs", "queue_free")
// Note that for calling Godot-provided methods with strings,
// we have to use the original Godot snake_case name.
GetTree().CallGroup("mobs", Node.MethodName.QueueFree);
La fonction call_group() appelle la fonction nommée sur chaque nœud d'un groupe - dans ce cas nous disons à chaque mob de s'effacer eux-même.
Le jeu est pratiquement terminé à ce stade. Dans la prochaine et dernière partie, nous allons le peaufiner un peu en ajoutant un arrière-plan, une musique qui boucle et quelques raccourcis clavier.