Salut tous !
Je vous propose un petit défis de programmation, un problème qui ne nécessite pas de produire de code pour être résolu mais plutôt d'une idée de mécanisme...
Contexte:
Je cherchais à faire coder une outil simple et rapide d'utilisation pour réaliser des GUI en C++.
Je me suis rappelé du mécanisme présent dans le moteur Unity3D. (Dans ce moteur, des scripts sont lu plusieurs fois par seconde pour rafraîchir le comportement du jeu dont la GUI.)
Par exemple:
Ceci permet non seulement de créer un bouton, mais aussi d'y définir sa taille, position, son contenu (texte) et de savoir si on a cliqué dessus. Le tout en une ligne de code, ça c'est bien pratique !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 if (GUI.Button(new Rect(10, 70, 50, 30), "Click")) Debug.Log("Clicked the button with text");
Pour faire cela, pas vraiment de mystère; le moteur Unity3D peut préparer l'image en fonction des paramètres et regarder l'actuelle position de la souris pour savoir si on clique dessus.
Mais là où ça devient intéressant, c'est avec les fonctions de GUI "dynamique et flexible" qui vont automatiquement s'adapter au contenu d'une boite.
Voyez plutôt:
Ce code déclare tout d'abord un nouveau champ horizontal puis y insère 2 boutons dont la taille devra automatiquement s'adapter suivant l'espace de la taille du champ actuel et de la taille des autres éléments (même ceux déclarés après !).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 GUILayout.BeginHorizontal("box"); if ( GUILayout.Button("I'm the first button") ) Debug.Log("Clicked"); if ( GUILayout.Button("I'm to the right") ) Debug.Log("Clicked"); GUILayout.EndHorizontal();
La question est; comment le gestionnaire de GUI peut-il savoir si on a cliqué sur le bouton de la ligne 2 alors que celui-ci ne connaîtra sa taille réelle qu'en ligne 4, quand tout le contenu sera défini. Et par conséquent, comment peut il renvoyer sur la même instruction si oui ou non on a bien cliqué sur le bouton ?
Ma piste;
- Laisser passer une frame, et identifier les appels pour renvoyer la réponse à la prochaine frame. (mais comment les identifier sans instanciation !?)
Une idée ?
PS admin:
ah je me suis peut être planté de sous forum, je viens de voir celui là;
http://www.developpez.net/forums/f14...x-video/unity/
Bien que le problème concerne le C++, les forumeur de unity comprendraient peut être mieux l'exemple fourni...
Partager