|
@@ -490,6 +490,7 @@ de votre code. Vos collègues ou le futur vous-même vous remerciera !
|
|
- Référence :
|
|
- Référence :
|
|
<https://docs.godotengine.org/fr/4.x/classes/class_signal.html>
|
|
<https://docs.godotengine.org/fr/4.x/classes/class_signal.html>
|
|
|
|
|
|
|
|
+
|
|
## Afficher un écran de game over
|
|
## Afficher un écran de game over
|
|
|
|
|
|
|
|
|
|
@@ -498,30 +499,30 @@ Niv. 1
|
|
|
|
|
|
|
|
|
|
- Action
|
|
- Action
|
|
- - Dé-commenter le signal "partie_perdu" dans la scène du
|
|
|
|
- lanceur.
|
|
|
|
|
|
+ - Ajouter un signal "partie_perdu" dans la scène du
|
|
|
|
+ lanceur. Ce sera un signal brut, sans argument.
|
|
- L'émettre quand il n'y a plus de balle (fonction
|
|
- L'émettre quand il n'y a plus de balle (fonction
|
|
- "lancer_balle()").
|
|
|
|
|
|
+ `lancer_balle()`).
|
|
- Brancher dans chaque niveau :
|
|
- Brancher dans chaque niveau :
|
|
- Le signal partie_perdue du lanceur vers le nœud "Message"
|
|
- Le signal partie_perdue du lanceur vers le nœud "Message"
|
|
- et sa fonction "show()".
|
|
|
|
|
|
+ et sa fonction `show()`. C'est une fonction Godot, vous
|
|
|
|
+ devez décocher "Scripts Methods Only" pour voir cette méthode.
|
|
- Le signal partie_perdue du lanceur vers le nœud
|
|
- Le signal partie_perdue du lanceur vers le nœud
|
|
- "Message/Perdu" et sa fonction "show()".
|
|
|
|
|
|
+ "Message/Perdu" et sa fonction `show()`.
|
|
|
|
|
|
|
|
+![Brancher un signal a une methode Godot](img/editor_signal_decocher_methodes_script_seulement.png).
|
|
|
|
|
|
|
|
|
|
## Afficher un écran de victoire
|
|
## Afficher un écran de victoire
|
|
|
|
|
|
-
|
|
|
|
-
|
|
|
|
Niv. 3 : beaucoup d'étapes
|
|
Niv. 3 : beaucoup d'étapes
|
|
|
|
|
|
|
|
|
|
- Actions
|
|
- Actions
|
|
- - S'inspirer de l'écran de game over pour créer l'écran de
|
|
|
|
|
|
+ - S'inspirer de la scène game over `perdu.tscn` pour créer la scène de
|
|
victoire.
|
|
victoire.
|
|
- Comprendre la logique de comptage des briques -> code à
|
|
- Comprendre la logique de comptage des briques -> code à
|
|
- dé-commenter dans conteneur_briques.gd
|
|
|
|
|
|
+ dé-commenter dans `conteneur_briques.gd`
|
|
- Afficher le message dans chaque niveau
|
|
- Afficher le message dans chaque niveau
|
|
- Ajouter votre nouvelle scène en tant que nœud enfant de
|
|
- Ajouter votre nouvelle scène en tant que nœud enfant de
|
|
Message
|
|
Message
|
|
@@ -529,7 +530,7 @@ Niv. 3 : beaucoup d'étapes
|
|
détruire lanceur).
|
|
détruire lanceur).
|
|
|
|
|
|
|
|
|
|
-Note : comme les balles créées par le lanceur sont des nœuds enfants,
|
|
|
|
|
|
+> Note : comme les balles créées par le lanceur sont des nœuds enfants,
|
|
détruire le lanceur détruit aussi toutes les balles.
|
|
détruire le lanceur détruit aussi toutes les balles.
|
|
|
|
|
|
|
|
|
|
@@ -537,7 +538,6 @@ détruire le lanceur détruit aussi toutes les balles.
|
|
## Faire accélérer la balle
|
|
## Faire accélérer la balle
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
Niv. 2
|
|
Niv. 2
|
|
|
|
|
|
|
|
|
|
@@ -561,6 +561,54 @@ Niv. 2
|
|
- Note : 10 px / sec / touche c'est bien pour avoir un bon
|
|
- Note : 10 px / sec / touche c'est bien pour avoir un bon
|
|
challenge.
|
|
challenge.
|
|
|
|
|
|
|
|
+> Conventions : les fonctions et variables considérées internes à votre
|
|
|
|
+votre script sont préfixées par un trait bas `_`. Elles sont dites *privées*.
|
|
|
|
+Cela donne une indication de qui a le droit d'utiliser cette donnée, facilitant
|
|
|
|
+la lecture et la maintenance du code.
|
|
|
|
+Par exemple, `_vitesse` est une variable privée ; seule la balle elle-même
|
|
|
|
+a le droit de la modifier, car c'est sa responsabilité.
|
|
|
|
+
|
|
|
|
+### Explications : les fonctions virtuelles Godot
|
|
|
|
+
|
|
|
|
+Certaines méthodes préfixées par `_` sont des fonctions que Godot connaît
|
|
|
|
+et qu'il peut appeler pour vous donner le contrôle à certains moments.
|
|
|
|
+
|
|
|
|
+La méthode `_ready()` est appelée après que votre nœud soit entré en scène,
|
|
|
|
+et dès tous ses enfants sont prêts (c'est à dire que la fonction _ready() a
|
|
|
|
+été appelée pour chaque enfant). Cette méthode est présente dans de nombreux scripts pour
|
|
|
|
+préparer un nœud.
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+La méthode `_process` est appelée avant le rendu de chaque image. Cette méthode
|
|
|
|
+peut être utilisée pour coder la logique de votre jeu (gagner des points ou de la vie
|
|
|
|
+par exemple) ou pour modifier l'apparence de votre nœud (changer la couleur de votre objet au fil du temps).
|
|
|
|
+Par défaut, cette fonction est appelée 60 fois par seconde, mais dépend de la fréquence de rafraîchissement
|
|
|
|
+de votre écran.
|
|
|
|
+
|
|
|
|
+La méthode `_physics_process` est appelée à chaque fois que Godot résoud
|
|
|
|
+les calculs physiques permettant de déplacer vos objets. Cette fonction est importante
|
|
|
|
+pour appliquer des forces ou déplacer vos objets.
|
|
|
|
+Par défaut, cette fonction est appelée 50 fois par seconde, mais cela peut se paramétrer.
|
|
|
|
+
|
|
|
|
+> Note : les fonctions `_process` et `_physics_process` reçoivent un nombre à virgules, `delta: float`,
|
|
|
|
+qui représente le nombre de secondes depuis la dernière fois ou la fonction est appelée. Dans l'idéal,
|
|
|
|
+ce nombre est très souvent fixe, mais il peut varier selon la performance de l'appareil. Il faut donc le prendre en compte
|
|
|
|
+pour vos calculs liés au temps. Par exemple, si un objet se déplace à 40 pixels par seconde, on écrira :
|
|
|
|
+
|
|
|
|
+```gd
|
|
|
|
+func _physics_process(delta: float) -> void:
|
|
|
|
+ position.x += 40.0 * delta
|
|
|
|
+```
|
|
|
|
+
|
|
|
|
+Enfin, la méthode `_unhandled_input()` est appelée quand un périphérique est actionné :
|
|
|
|
+quand une touche de clavier est enfoncée, quand la souris a bougé, un joystick de manette s'est déplacé,
|
|
|
|
+quand un bouton de manette est relâché. Elle prend un argument qui décrit l'événement qui a eu lieu.
|
|
|
|
+
|
|
|
|
+> Note : la fonction `_input()` existe aussi, mais préférez `_unhandled_input` qui appelée seulement si
|
|
|
|
+l'événement n'a pas déjà été consommé par un autre nœud.
|
|
|
|
+
|
|
|
|
+Il existe d'autres méthodes virtuelles exposées par Godot, mais vous connaissez maintenant les plus
|
|
|
|
+utiles.
|
|
|
|
|
|
## Le carrefour Godot
|
|
## Le carrefour Godot
|
|
|
|
|
|
@@ -592,20 +640,20 @@ positionnel en 3 dimensions).
|
|
|
|
|
|
- Actions
|
|
- Actions
|
|
- Ajouter un nœud AudioStreamplayer dans la scène de niveau.
|
|
- Ajouter un nœud AudioStreamplayer dans la scène de niveau.
|
|
- - Charger la musique voulu dans le champs "Stream" de
|
|
|
|
- l'AudioStreamPlayer dans l'inspecteur.
|
|
|
|
|
|
+ - Charger la musique voulue dans le champs "Stream" de
|
|
|
|
+ l'AudioStreamPlayer dans l'inspecteur. Des musiques
|
|
|
|
+ sont disponibles dans le dossier `ressources/musiques`.
|
|
- Bien penser à cocher `loop` pour les musiques importées !
|
|
- Bien penser à cocher `loop` pour les musiques importées !
|
|
- Dans le champs Bus dans l'inspecteur, sélectionner : Musique
|
|
- Dans le champs Bus dans l'inspecteur, sélectionner : Musique
|
|
- Cocher le champs "Autoplay".
|
|
- Cocher le champs "Autoplay".
|
|
- Enfin dans la section "Process" changer le champs "Mode"
|
|
- Enfin dans la section "Process" changer le champs "Mode"
|
|
pour la valeur "Always" (sinon la musique se mettra en pause
|
|
pour la valeur "Always" (sinon la musique se mettra en pause
|
|
- lors de l'affichage du menu pause.
|
|
|
|
|
|
+ lors de l'affichage du menu pause.)
|
|
- Référence
|
|
- Référence
|
|
- Le nœud AudioStreamPlayer :
|
|
- Le nœud AudioStreamPlayer :
|
|
<https://docs.godotengine.org/fr/4.x/classes/class_audiostreamplayer.html>
|
|
<https://docs.godotengine.org/fr/4.x/classes/class_audiostreamplayer.html>
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
## Faire un bruit au clic sur bouton début
|
|
## Faire un bruit au clic sur bouton début
|
|
|
|
|
|
|
|
|
|
@@ -617,27 +665,31 @@ Niv. 2
|
|
- Ajout du son de clic bouton dans le Menu Pause :
|
|
- Ajout du son de clic bouton dans le Menu Pause :
|
|
- Ajouter un AudioStreamPlayer dans la scène
|
|
- Ajouter un AudioStreamPlayer dans la scène
|
|
"pause_menu.tscn"
|
|
"pause_menu.tscn"
|
|
- - Nommer l'AudioStreamPlayer : "clic_sound".
|
|
|
|
|
|
+ - Nommer l'AudioStreamPlayer : *SonClic*.
|
|
- Charger le son de clic dans le champs "Stream" de
|
|
- Charger le son de clic dans le champs "Stream" de
|
|
- l'AudioStreamPlayer.
|
|
|
|
|
|
+ l'AudioStreamPlayer : `composants/interface/clic_sfx.wav`
|
|
- Dans le champs Bus dans l'inspecteur, sélectionner : Bruits
|
|
- Dans le champs Bus dans l'inspecteur, sélectionner : Bruits
|
|
- - Ajouter "get_node("clic_sound").play()" dans les
|
|
|
|
- fonctions "_quand_bouton_reprendre_est_presse()",
|
|
|
|
- "_quand_bouton_retour_titre_est_presse()" et
|
|
|
|
- "_quand_bouton_quitter_est_presse()" dans le script
|
|
|
|
- "pause_menu.gd".
|
|
|
|
|
|
+ - Choix 1 : Brancher les signaux `pressed` de chaque bouton à la fonction
|
|
|
|
+ interne `play` de l'AudioStreamPlayer.
|
|
|
|
+ - Choix 2 : Ajouter `$SonClic.play()` dans les
|
|
|
|
+ fonctions `_quand_bouton_reprendre_est_presse()`,
|
|
|
|
+ `_quand_bouton_retour_titre_est_presse()` et
|
|
|
|
+ `_quand_bouton_quitter_est_presse()` du script
|
|
|
|
+ `pause_menu.gd`.
|
|
- Ajout du son de clic bouton sur les planètes du Menu Principal :
|
|
- Ajout du son de clic bouton sur les planètes du Menu Principal :
|
|
- Ajouter un AudioStreamPlayer dans la scène
|
|
- Ajouter un AudioStreamPlayer dans la scène
|
|
- "choix_niveau.tscn" en enfant du nœud
|
|
|
|
- "DefilementNiveaux".
|
|
|
|
- - Nommer l'AudioStreamPlayer : "clic_sound".
|
|
|
|
|
|
+ `choix_niveau.tscn` en enfant du nœud
|
|
|
|
+ *DefilementNiveaux*.
|
|
|
|
+ - Nommer l'AudioStreamPlayer : *SonClic*.
|
|
- Charger le son de clic dans le champs "Stream" de
|
|
- Charger le son de clic dans le champs "Stream" de
|
|
l'AudioStreamPlayer.
|
|
l'AudioStreamPlayer.
|
|
- Dans le champs Bus dans l'inspecteur, sélectionner : Bruits
|
|
- Dans le champs Bus dans l'inspecteur, sélectionner : Bruits
|
|
- - Ajouter
|
|
|
|
- "get_parent().get_parent().get_node("clic_sound").play()"
|
|
|
|
- dans la fonction "_quand_planete_est_cliquee()" dans
|
|
|
|
- le script "planete.gd".
|
|
|
|
|
|
+ - Choix 1 : Brancher les signaux `pressed` de chaque bouton planète
|
|
|
|
+ à la fonction `play` de *SonClic*
|
|
|
|
+ - Choix 2 : Clic droit sur le nœud *SonClic* puis "% Access as Unique Name".
|
|
|
|
+ Puis ajouter `%SonClic.play()`
|
|
|
|
+ dans la fonction `_quand_planete_est_cliquee()` dans
|
|
|
|
+ le script `planete.gd`.
|
|
|
|
|
|
|
|
|
|
|
|
|