Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
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
Dans l'inspecteur, ajouter le texte
0.Dans l'inspecteur, réglez "Alignement horizontal" et "Alignement vertical" sur
Centre.Dans l'inspecteur sous "Contrôle - Disposition" ou dans l'espace de travail 2D, choisissez le « Préréglage d'ancrage »
Centre Haut.
Message
Dans l'inspecteur de nœud, ajoutez le texte :
Dodge the Creeps !.Dans l'inspecteur, 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.Dans l'espace de travail 2D, 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 :
In the Signals tab, connect the HUD's start_game signal to the new_game()
function of the Main node by clicking the "Pick" button in the "Connect a Signal"
window and selecting the new_game() method or type "new_game" below "Receiver Method"
in the window. Verify that the green connection icon now appears next to
func new_game() in the 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.
Vous êtes maintenant prêt à jouer ! Cliquez sur le bouton "Lancer le projet".
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".
Dans la scène Mob, sélectionnez le nœud racine et cliquez sur l'onglet Groupes à côté de l'onglet Signaux et sur le bouton "+" pour ouvrir la fenêtre "Créer nouveau groupe".
Nommez le groupe mobs et cliquez sur "ok" pour ajouter un nouveau groupe de scène.
Maintenant, toutes les monstres seront dans le groupe "monstres".
Nous pouvons ensuite ajouter la ligne suivante à la fonction new_game() dans 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.