💬 Créer des bulles de dialogue dans une scène vivante
📘 Voir le lexique de la Team Padawan – pour bien comprendre les mots comme @onready
, await
, Area2D
…
Bienvenue dans cette leçon où l’on apprend à créer des bulles de dialogue visuelles pour enrichir l’univers de ton jeu !
On va suivre une petite scène mignonne dans un village 🌸 :
🧩 Cette leçon s’appuie sur :
🎭 Contexte
👧 Un petit enfant marche automatiquement entre deux points :
- Sa maman, qui reste statique
- Un poussin, perché pas loin 🐥
👉 Lorsqu’il atteint sa maman ou le poussin, il affiche une petite bulle ❤️.
Et lorsque l’enfant s’approche, la maman affiche une vraie bulle avec du texte animé ✨
👶 Niveau Débutant – Afficher une bulle image simple (❤️)
🎯 Objectif
Quand l’enfant atteint un point précis (maman ou poussin), il affiche une bulle contenant juste une image (ex : un cœur ❤️)
📐 Structure de la scène Enfant
Enfant (CharacterBody2D)
├── AnimatedSprite2D
├── CollisionShape2D
├── AudioStreamPlayer2D
├── Control (la bulle)
│ └── Panel (avec une texture cœur)
💡 Mets
Control.visible = false
au départ
🧠 Script kids.gd
if global_position.distance_to(target_pos) < 2.0:
en_pause = true
$Control.visible = true # Affiche le cœur
animated_sprite_2d.stop()
await get_tree().create_timer(3.0).timeout
$Control.visible = false
animated_sprite_2d.play()
await attendre_et_changer()
✅ Résultat
L’enfant s’arrête près de sa maman ou du poussin, montre une petite bulle ❤️, puis continue sa route.
✨ Niveau Intermédiaire – Afficher un texte animé (Tween + Label)
🎯 Objectif
Quand un PNJ détecte qu’un autre s’approche (via une Area2D
), il affiche une bulle avec texte qui apparaît et disparaît en fondu.
📐 Structure de la scène Maman
Maman (StaticBody2D)
├── AnimatedSprite2D
├── CollisionShape2D
├── Area2D
│ └── CollisionShape2D
├── BubbleUI (Control)
├── PanelVideEtInvisible
└── PanelText
└── Text1 (Label)
💡 Mets
BubbleUI.visible = false
au départ
🧠 Script maman.gd
@onready var bubble_ui: Control = $BubbleUI
func _on_area_2d_body_entered(body: Node2D) -> void:
if body.name == "Enfant":
show_bubble()
await get_tree().create_timer(2.5).timeout
await hide_bubble()
func show_bubble():
bubble_ui.visible = true
bubble_ui.modulate.a = 0.0
var tween = create_tween()
tween.tween_property(bubble_ui, "modulate:a", 1.0, 0.4)
func hide_bubble():
var tween = create_tween()
tween.tween_property(bubble_ui, "modulate:a", 0.0, 0.4)
await tween.finished
bubble_ui.visible = false
💬 Pour changer le texte :
$BubbleUI/PanelText/Text1.text = "Tu as vu ce petit poussin ? Il est né ce matin 🐣"
🧋 Résumé des deux méthodes
Méthode | Type de bulle | Contenu | Effets | Déclencheur |
---|---|---|---|---|
Débutant | Image simple | ❤️ | Instantané | Quand l’enfant atteint un point |
Intermédiaire | Texte animé | Dialogue | Fondu In/Out | Quand le joueur entre dans une zone |