{{tag>ludique dev godot gui}} ====== Les GUI avec Godot ====== La conception des interfaces graphiques est souvent une tâche fastidieuse pour les programmeurs: * Alignement précis des composants graphiques. * Évolution des éléments graphique pendant la conception/test. * Contrôle correct des différentes résolutions d'affichage. * Animation des composants. Godot propose un ensemble d'outils capables de s'adapter et de mixer différentes approches. La phase d'apprentissage est un peut plus longue que dans certains autres toolkits mais présente l'avantage de partager les mêmes ensembles d'outils que les concepteurs et animateurs. ===== Le node Control ===== Tout élément de l'interface graphique hérite du node **Control** (pour d'autres systèmes on parle de "Widget" ou de "Box"). Les coordonnées et la taille d'un node Control sont toujours relatifs au node parent. ===== Input et rafraîchissement ===== Les nodes de type Control recoivent des evenements par l’intermédiaire de la méthode de callback **Control.input_envent()**. * Seul le Control ayant le focus reçoit les événement en provenance du clavier/joypad * Les événements liés au mouvement de la souris sont reçus par les Control sous le pointeur. * Lorsque un node Control reçoit de la souris l’événement "bouton pressé", tous les mouvements suivants sont également reçus jusqu'à ce que le bouton soit relâché ou que la souris dépasse les limites du Control. **Control** hérite de la classe **CanvasItem**, l'appel de la méthode CanvasItem._draw() a lieu la création de l'objet puis la méthode CanvasItem.update() pourra être fait à chaque fois que l'élément aura besoin d'être rafraîchis. Si le Control n'est pas visible, il ne reçoit aucune entrée. ===== Complexité des interfaces utilisateur ===== Godot inclus des dizaines de Control classés en deux catégories. * Un petit ensemble de Control simples adaptés aux entrées génériques. * Le second ensemble concerne les interfaces plus complexes s'habillant avec des styles. ==== Les Control simples ==== Ils sont utilisables lorsque les interactions ou les présentations complexes avec le joueurs ne sont pas nécessaires. * Label, pour montrer du texte * TextureFrame, affiche une texture avec mise a l’échelle ou fixe. * TextureButton, bouton texturé * TextureProgress, barre de progression Le repositionnement des Controls est rendu efficient via l'utilisation des ancres. Dasn tous les cas il arrivera souvent que des UI plus complexes soit nécessaires par exemple défilement d'une liste d'éléments ou une table des scores qui utiliseront les objets ScrollContainer ou VBoxContainer. Ces types de controls plus avancés peuvent être mixés avec des Controls simple ===== Références ===== * http://docs.godotengine.org/en/stable/learning/step_by_step/gui_tutorial.html