|
| GUI déplaçables | |
| | Auteur | Message |
---|
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: GUI déplaçables Sam 14 Jan 2012 - 11:14 | |
| Permettre à l'utilisateur de déplacer les GUI à la souris est en fait d'une facilité déconcertante ! Il vous suffit d'ajouter le code suivant dans la fonction repeatedly_execute de votre GlobalScript : - Code:
-
// Ces variables vont respectivement noter la position X, la position Y de la souris et le numéro du GUI survolé int PosGUI_x, PosGUI_y, PosGUI_on; function repeatedly_execute() { // On récupère l'éventuel élément de GUI que survole la souris GUIControl* ctrl = GUIControl.GetAtScreenXY(mouse.x, mouse.y); // Tant que la souris survole un élément de GUI, PosGUI_on vaut -1 : // l'utilisateur ne peut pas déplacer le GUI (évite les conflits avec les sliders) if ((ctrl != null) && (!PosGUI_on)) PosGUI_on = -1; // Si on relâche le bouton de la souris, PosGUI_on vaut 0 : // l'utilisateur pourra recliquer pour déplacer à nouveau if ((!Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on)) PosGUI_on = 0; // Si PosGUI_on > 0, alors c'est que l'utilisateur est en train de déplacer // le GUI numéro PosGUI_on-1 (le premier GUI étant le GUI numéro 0) if (PosGUI_on > 0) { // legui pointe sur le GUI que l'utilisateur déplace (PosGUI_on-1) GUI* legui = gui[PosGUI_on - 1]; // On vérifie tout de même que le GUI PosGUI_on-1 existe bien // Et si l'utilisateur a déplacé la souris depuis le dernier cycle... if ((legui != null) && ((mouse.x != PosGUI_x) || (mouse.y != PosGUI_y))) { // ... on déplace le GUI à la nouvelle position... legui.SetPosition(legui.X + (mouse.x - PosGUI_x), legui.Y + (mouse.y - PosGUI_y)); // ... et on indique où est la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } } // Si l'utilisateur a cliqué et qu'il a le droit de déplacer le GUI (PosGUI_on > -1)... else if ((Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on > -1)) { // ... on récupère l'éventuel GUI sur lequel l'utilisateur a cliqué... GUI* alecran = GUI.GetAtScreenXY(mouse.x, mouse.y); // ... et s'il a bien cliqué sur un GUI... if (alecran != null) { // ... on retient le numéro du GUI (+ 1) dans PosGUI_on... PosGUI_on = alecran.ID + 1; // ... et les coordonnées où se trouve la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } // Si le clic était hors d'un GUI, le joueur devra relâcher le clic // avant de pouvoir recliquer pour déplacer le GUI else PosGUI_on = -1; } } Désormais, il suffira au joueur de maintenir son clic sur le fond du GUI et de déplacer la souris pour déplacer le GUI. Si vous le désirez, vous pouvez plutôt opter pour placer un bouton dédié dans vos GUI. On aura alors un code comme celui-ci : - Code:
-
int PosGUI_x, PosGUI_y, PosGUI_on; function repeatedly_execute() { if ((!Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on)) PosGUI_on = 0; if (PosGUI_on > 0) { GUI* legui = gui[PosGUI_on - 1]; if ((legui != null) && ((mouse.x != PosGUI_x) || (mouse.y != PosGUI_y))) { legui.SetPosition(legui.X + (mouse.x - PosGUI_x), legui.Y + (mouse.y - PosGUI_y)); PosGUI_x = mouse.x; PosGUI_y = mouse.y; } } // Lorsque le bouton de la souris est enfoncé et que le joueur a le droit de déplacer... else if ((Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on > -1)) { // ... on récupère l'éventuel élément de GUI que survole la souris... GUIControl* alecran = GUIControl.GetAtScreenXY(mouse.x, mouse.y); // ... s'il y en a un... if (alecran != null) { // ... on tente de le convertir en bouton... Button *leBouton = alecran.AsButton; // ... si la conversion a réussi et si ce bouton a bien l'image que l'on veut (ici, l'image 1) if ((leBouton != null) && (leBouton.Graphic == 1)) { // ... on retient le numéro du GUI (+ 1) dans PosGUI_on... PosGUI_on = leBouton.OwningGUI.ID + 1; // ... et les coordonnées où se trouve la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } // ... si la conversion n'a pas réussi ou que le bouton n'a pas l'image voulue, // l'utilisateur a cliqué ailleurs et n'aura pas le droit de déplacer le GUI // avant d'avoir relâché le clic else PosGUI_on = -1; } // S'il n'y a pas d'élément de GUI, l'utilisateur a cliqué ailleurs : // il n'aura pas le droit de déplacer le GUI avant d'avoir relâché le clic else PosGUI_on = -1; } } Voilà, bon développement ! _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
| | | Godzillu Grand Cliqueur Royal
Nombre de messages : 1658
Date d'inscription : 11/03/2007
| Sujet: Re: GUI déplaçables Sam 14 Jan 2012 - 12:04 | |
| Whaou merci, tu es très motivé en ce début d'année |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: GUI déplaçables Sam 14 Jan 2012 - 12:10 | |
| - Godzillu a écrit:
- Whaou merci, tu es très motivé en ce début d'année
De rien En fait comme je l'ai dit, j'ai dû coder pas mal de trucs pour faire ce que je voulais avec LibreMotus. Du coup je me suis dit "autant le partager avec tout le monde". C'est des choses simples mais assez utiles quand on veut mettre en place des interfaces. Je songe aussi à poster une explication sur comment implémenter une image-aperçu dans un GUI (comme l'aperçu de la couleur lorsqu'on la règle par des curseurs), mais je suis pas certain que ça soit très pertinent. Bref, j'espère que ces choses vous serviront ! _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
| | | Alph Eratz Cliqueur Emérite
Nombre de messages : 861
Age : 60
Localisation : Ca y est Saroumane le multicolor est défait, en route pour le Rohan
Date d'inscription : 22/01/2008
| Sujet: Re: GUI déplaçables Sam 14 Jan 2012 - 13:19 | |
| Salut tout le monde, C'est tip-top, je vais l'utiliser pour tous les jeux que je créerai car je trouve que ça permet d'avoir une meilleure vue d'ensemble de l'écran de jeu. Petite questions: quand on referme le gui en question, il se repositionne à son emplacement d'origine ou bien il reste là où on l'a mis? Une autre qui me vient à l'esprit. Pour les GUIs de décors, peut-on les verrouiller pour éviter de les déplacer par inadvertance?
|
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: GUI déplaçables Sam 14 Jan 2012 - 14:12 | |
| - Alph Eratz a écrit:
- Petite questions: quand on referme le gui en question, il se repositionne à son emplacement d'origine ou bien il reste là où on l'a mis?
Hmm, je pense que si tu sauvegardes une partie, les coordonnées du GUI sont également sauvegardées. Donc à moins que tu aies une autre fonction quelque part qui positionne les GUIs à sa façon, je pense que ça gardera la position. Dans LibreMotus je n'utilise pas de sauvegarde, plutôt j'utilise un fichier où je stocke les paramètres (avec mon module FichiersParamètres justement) comme ça je repositionne le GUI au lancement en lisant la position dans le fichier. - Alph Eratz a écrit:
- Une autre qui me vient à l'esprit.
Pour les GUIs de décors, peut-on les verrouiller pour éviter de les déplacer par inadvertance? Une solution est d'ajouter une condition pour éviter d'accepter le clic sur certains GUIs. Par exemple, si tu as un GUI gDecor que tu ne veux pas que l'utilisateur puisse déplacer, tu peux ajouter une condition ici : - Code:
-
// ... et s'il a bien cliqué sur un GUI ET SI CE N'EST PAS gDecor... if ((alecran != null) && (alecran != gDecor)) { // ... on retient le numéro du GUI (+ 1) dans PosGUI_on... PosGUI_on = alecran.ID + 1; // ... et les coordonnées où se trouve la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } Tu peux ajouter autant de "&&" que tu veux (enfin, théoriquement ) Voilà, si tu as d'autres questions n'hésite pas _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
| | | Alph Eratz Cliqueur Emérite
Nombre de messages : 861
Age : 60
Localisation : Ca y est Saroumane le multicolor est défait, en route pour le Rohan
Date d'inscription : 22/01/2008
| Sujet: Re: GUI déplaçables Dim 15 Jan 2012 - 3:04 | |
| J'ai testé les GUIs déplaçable, c'est vraiment super, d'une pièce à l'autre ils restent aux endroits où ils ont été déplacer. Ceux des bords apparemment ne bouge pas mais le gui principale lui bouge et mon GUI d'options aussi, donc je verrai demain pour les fixer avec ta méthode. J'ai copié ton dernier code en modifiant bien sûr le noms des gGuis que je voulais bloquer mais ça me donne Undefined symbole 'alecran' Je l'ai mis à la suite du premier. - Code:
-
function repeatedly_execute() { // On récupère l'éventuel élément de GUI que survole la souris GUIControl* ctrl = GUIControl.GetAtScreenXY(mouse.x, mouse.y); // Tant que la souris survole un élément de GUI, PosGUI_on vaut -1 : // l'utilisateur ne peut pas déplacer le GUI (évite les conflits avec les sliders) if ((ctrl != null) && (!PosGUI_on)) PosGUI_on = -1; // Si on relâche le bouton de la souris, PosGUI_on vaut 0 : // l'utilisateur pourra recliquer pour déplacer à nouveau if ((!Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on)) PosGUI_on = 0; // Si PosGUI_on > 0, alors c'est que l'utilisateur est en train de déplacer // le GUI numéro PosGUI_on-1 (le premier GUI étant le GUI numéro 0) if (PosGUI_on > 0) { // legui pointe sur le GUI que l'utilisateur déplace (PosGUI_on-1) GUI* legui = gui[PosGUI_on - 1]; // On vérifie tout de même que le GUI PosGUI_on-1 existe bien // Et si l'utilisateur a déplacé la souris depuis le dernier cycle... if ((legui != null) && ((mouse.x != PosGUI_x) || (mouse.y != PosGUI_y))) { // ... on déplace le GUI à la nouvelle position... legui.SetPosition(legui.X + (mouse.x - PosGUI_x), legui.Y + (mouse.y - PosGUI_y)); // ... et on indique où est la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } } // Si l'utilisateur a cliqué et qu'il a le droit de déplacer le GUI (PosGUI_on > -1)... else if ((Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on > -1)) { // ... on récupère l'éventuel GUI sur lequel l'utilisateur a cliqué... GUI* alecran = GUI.GetAtScreenXY(mouse.x, mouse.y); // ... et s'il a bien cliqué sur un GUI... if (alecran != null) { // ... on retient le numéro du GUI (+ 1) dans PosGUI_on... PosGUI_on = alecran.ID + 1; // ... et les coordonnées où se trouve la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } // Si le clic était hors d'un GUI, le joueur devra relâcher le clic // avant de pouvoir recliquer pour déplacer le GUI else PosGUI_on = -1; } // ... et s'il a bien cliqué sur un GUI ET SI CE N'EST PAS gDemarrage et gGuprincipal... if ((alecran != null) && (alecran != gDemarrage)) { // ... on retient le numéro du GUI (+ 1) dans PosGUI_on... PosGUI_on = alecran.ID + 1; // ... et les coordonnées où se trouve la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } } |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: GUI déplaçables Dim 15 Jan 2012 - 11:16 | |
| - Alph Eratz a écrit:
- Ceux des bords apparemment ne bouge pas mais le gui principale lui bouge et mon GUI d'options aussi, donc je verrai demain pour les fixer avec ta méthode.
Le premier code que j'ai donné permet de déplacer les GUIs lorsqu'on clique sur le fond du GUI (c'est-à-dire là où il n'y a aucun élément de GUI, donc ni bouton, ni liste, ni slider, ni texte, etc.). Si tout un GUI est recouvert d'élément, alors tu ne pourras pas le déplacer (c'est peut-être le cas de tes GUI de bord). - Alph Eratz a écrit:
- J'ai copié ton dernier code en modifiant bien sûr le noms des gGuis que je voulais bloquer mais ça me donne
Undefined symbole 'alecran'
Je l'ai mis à la suite du premier. Le code que j'ai donné à la fin était une modification du premier, pas un ajout. Je pense que le code donnerait donc ça : - Code:
-
function repeatedly_execute() { // On récupère l'éventuel élément de GUI que survole la souris GUIControl* ctrl = GUIControl.GetAtScreenXY(mouse.x, mouse.y); // Tant que la souris survole un élément de GUI, PosGUI_on vaut -1 : // l'utilisateur ne peut pas déplacer le GUI (évite les conflits avec les sliders) if ((ctrl != null) && (!PosGUI_on)) PosGUI_on = -1; // Si on relâche le bouton de la souris, PosGUI_on vaut 0 : // l'utilisateur pourra recliquer pour déplacer à nouveau if ((!Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on)) PosGUI_on = 0; // Si PosGUI_on > 0, alors c'est que l'utilisateur est en train de déplacer // le GUI numéro PosGUI_on-1 (le premier GUI étant le GUI numéro 0) if (PosGUI_on > 0) { // legui pointe sur le GUI que l'utilisateur déplace (PosGUI_on-1) GUI* legui = gui[PosGUI_on - 1]; // On vérifie tout de même que le GUI PosGUI_on-1 existe bien // Et si l'utilisateur a déplacé la souris depuis le dernier cycle... if ((legui != null) && ((mouse.x != PosGUI_x) || (mouse.y != PosGUI_y))) { // ... on déplace le GUI à la nouvelle position... legui.SetPosition(legui.X + (mouse.x - PosGUI_x), legui.Y + (mouse.y - PosGUI_y)); // ... et on indique où est la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } } // Si l'utilisateur a cliqué et qu'il a le droit de déplacer le GUI (PosGUI_on > -1)... else if ((Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on > -1)) { // ... on récupère l'éventuel GUI sur lequel l'utilisateur a cliqué... GUI* alecran = GUI.GetAtScreenXY(mouse.x, mouse.y); // ... et s'il a bien cliqué sur un GUI ET SI CE N'EST PAS gDemarrage et gGuprincipal... if ((alecran != null) && (alecran != gDemarrage)) { // ... on retient le numéro du GUI (+ 1) dans PosGUI_on... PosGUI_on = alecran.ID + 1; // ... et les coordonnées où se trouve la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } // Si le clic était hors d'un GUI, le joueur devra relâcher le clic // avant de pouvoir recliquer pour déplacer le GUI else PosGUI_on = -1; } } _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
| | | Alph Eratz Cliqueur Emérite
Nombre de messages : 861
Age : 60
Localisation : Ca y est Saroumane le multicolor est défait, en route pour le Rohan
Date d'inscription : 22/01/2008
| Sujet: Re: GUI déplaçables Dim 15 Jan 2012 - 11:59 | |
| Et bien ça marche du tonnerre de Zeus, j'ai pu fixer les deux GUIs que je voulais. Je ne comprends plus, tout allait bien et maintenant j'ai un problème là: "Buffer exceeded you probably have a missing closing bracket on a previous line." |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: GUI déplaçables Lun 16 Jan 2012 - 17:25 | |
| - Alph Eratz a écrit:
- "Buffer exceeded you probably have a missing closing bracket on a previous line."
D'après ce message d'erreur, c'est que tu as sûrement oublié de fermer une accolade quelque part dans le script. Dans la capture d'écran que tu as mise, il y a justement une accolade qui se trouve un peu décalée à la ligne 35, juste après "Hypertext.Prerender();" : tu as justement peut-être oublié de fermer une accolade ici. Est-ce que tu as modifié cette partie du script après avoir ajouté le code pour les GUIs ? (ça expliquerait ce "nouveau" bug) Vérifie et essaie d'insérer une accolade fermante } après, à la ligne 36. Si ça remarche c'est que tu avais bien oublié une accolade Bon courage ! _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
| | | Alph Eratz Cliqueur Emérite
Nombre de messages : 861
Age : 60
Localisation : Ca y est Saroumane le multicolor est défait, en route pour le Rohan
Date d'inscription : 22/01/2008
| Sujet: Re: GUI déplaçables Lun 16 Jan 2012 - 18:24 | |
| Merci je vais voir ça de suite. Il est vrai que je me suis efforcé de chercher justement cette fameuse accolade mais impossible de voir où elle manquait. J'ai effectivement modifié cette partie et en faisant le copié/collé j'ai surement dû l'effacer. Je te dis ça tout de suite. Je viens de tester le script sur NotePad++ en C++ et ça m'a permis de détecter une accolade solitaire mais c'est une fermant elle est là " <==ICI", c'est la dernière accolade mais je ne vois pas à quoi elle correspond: - Code:
-
// Ces variables vont respectivement noter la position X, la position Y de la souris et le numéro du GUI survolé int PosGUI_x, PosGUI_y, PosGUI_on;
#sectionstart repeatedly_execute // DO NOT EDIT OR REMOVE THIS LINE function repeatedly_execute() { // On récupère l'éventuel élément de GUI que survole la souris GUIControl* ctrl = GUIControl.GetAtScreenXY(mouse.x, mouse.y); // Tant que la souris survole un élément de GUI, PosGUI_on vaut -1 : // l'utilisateur ne peut pas déplacer le GUI (évite les conflits avec les sliders) if ((ctrl != null) && (!PosGUI_on)) PosGUI_on = -1; // Si on relâche le bouton de la souris, PosGUI_on vaut 0 : // l'utilisateur pourra recliquer pour déplacer à nouveau if ((!Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on)) PosGUI_on = 0; // Si PosGUI_on > 0, alors c'est que l'utilisateur est en train de déplacer // le GUI numéro PosGUI_on-1 (le premier GUI étant le GUI numéro 0) if (PosGUI_on > 0) { // legui pointe sur le GUI que l'utilisateur déplace (PosGUI_on-1) GUI* legui = gui[PosGUI_on - 1]; // On vérifie tout de même que le GUI PosGUI_on-1 existe bien // Et si l'utilisateur a déplacé la souris depuis le dernier cycle... if ((legui != null) && ((mouse.x != PosGUI_x) || (mouse.y != PosGUI_y))) { // ... on déplace le GUI à la nouvelle position... legui.SetPosition(legui.X + (mouse.x - PosGUI_x), legui.Y + (mouse.y - PosGUI_y)); // ... et on indique où est la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } }} // Si l'utilisateur a cliqué et qu'il a le droit de déplacer le GUI (PosGUI_on > -1)... else if ((Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on > -1)) { // ... on récupère l'éventuel GUI sur lequel l'utilisateur a cliqué... GUI* alecran = GUI.GetAtScreenXY(mouse.x, mouse.y); // ... et s'il a bien cliqué sur un GUI ET SI CE N'EST PAS gDemarrage et gGuprincipal... if ((alecran != null) && (alecran != gDemarrage) && (alecran != gGuprincipal)) { // ... on retient le numéro du GUI (+ 1) dans PosGUI_on... PosGUI_on = alecran.ID + 1; // ... et les coordonnées où se trouve la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } // Si le clic était hors d'un GUI, le joueur devra relâcher le clic // avant de pouvoir recliquer pour déplacer le GUI else PosGUI_on = -1; } <== ICI }
Je dois peut-être la mettre " // Si le clic était hors...", ? Non ça ne marche pas. |
| | | Alph Eratz Cliqueur Emérite
Nombre de messages : 861
Age : 60
Localisation : Ca y est Saroumane le multicolor est défait, en route pour le Rohan
Date d'inscription : 22/01/2008
| Sujet: Re: GUI déplaçables Lun 16 Jan 2012 - 18:42 | |
| J'ai trouvé, c'est une guillemet (ou un, j'ai jamais su si c'était un mâle ou une femelle), sur une ligne supérieur qui causait les dégâts. |
| | | hanakin Cliqueur Amateur
Nombre de messages : 492
Age : 59
Localisation : Angers
Date d'inscription : 12/09/2012
| Sujet: guy deplaçable Jeu 6 Nov 2014 - 11:57 | |
| Bonjours Kitai j'ai essayé ton script pour déplacer un guy que j'ai mis dans le repetly execute du global script cela ne fait rien ? aurais-je oublier de prendre autre chose ? - Code:
-
// Ces variables vont respectivement noter la position X, la position Y de la souris et le numéro du GUI survolé int PosGUI_x, PosGUI_y, PosGUI_on; function repeatedly_execute() { // On récupère l'éventuel élément de GUI que survole la souris GUIControl* ctrl = GUIControl.GetAtScreenXY(mouse.x, mouse.y); // Tant que la souris survole un élément de GUI, PosGUI_on vaut -1 : // l'utilisateur ne peut pas déplacer le GUI (évite les conflits avec les sliders) if ((ctrl != null) && (!PosGUI_on)) PosGUI_on = -1; // Si on relâche le bouton de la souris, PosGUI_on vaut 0 : // l'utilisateur pourra recliquer pour déplacer à nouveau if ((!Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on)) PosGUI_on = 0; // Si PosGUI_on > 0, alors c'est que l'utilisateur est en train de déplacer // le GUI numéro PosGUI_on-1 (le premier GUI étant le GUI numéro 0) if (PosGUI_on > 0) { // legui pointe sur le GUI que l'utilisateur déplace (PosGUI_on-1) GUI* legui = gui[PosGUI_on - 1]; // On vérifie tout de même que le GUI PosGUI_on-1 existe bien // Et si l'utilisateur a déplacé la souris depuis le dernier cycle... if ((legui != null) && ((mouse.x != PosGUI_x) || (mouse.y != PosGUI_y))) { // ... on déplace le GUI à la nouvelle position... legui.SetPosition(legui.X + (mouse.x - PosGUI_x), legui.Y + (mouse.y - PosGUI_y)); // ... et on indique où est la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } } // Si l'utilisateur a cliqué et qu'il a le droit de déplacer le GUI (PosGUI_on > -1)... else if ((Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on > -1)) { // ... on récupère l'éventuel GUI sur lequel l'utilisateur a cliqué... GUI* alecran = GUI.GetAtScreenXY(mouse.x, mouse.y); // ... et s'il a bien cliqué sur un GUI... if (alecran != null) { // ... on retient le numéro du GUI (+ 1) dans PosGUI_on... PosGUI_on = alecran.ID + 1; // ... et les coordonnées où se trouve la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } // Si le clic était hors d'un GUI, le joueur devra relâcher le clic // avant de pouvoir recliquer pour déplacer le GUI else PosGUI_on = -1; } } comment on sait quel guy est autorisé ou pas être déplacer et doit on mettre le nom du guy quelques part ? _________________ Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. ( Spock) |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: GUI déplaçables Jeu 6 Nov 2014 - 16:59 | |
| Salut hanakin, Je me suis permis de déplacer ton message directement dans le sujet concerné, ça me paraît plus cohérent. Normalement le code fonctionne tel quel s'il est entré dans les bonnes conditions. Je suis un peu surpris car l'intégralité du code est indentée : es-tu sûr d'avoir placé ce code toute en haut du script, hors de toute fonction ? Quand tu dis que tu l'as mis dans repeatedly_execute, tu fais uniquement référence au repeatedly_execute qui se trouve dans mon code, n'est-ce pas ? Tu n'a pas imbriqué mon code à nouveau dans un autre repeatedly_execute ? Le code tel que je l'ai donné a pour effet de permettre à l'utilisateur de déplacer n'importe quel GUI en maintenant le clic enfoncé sur l'arrière-plan du GUI et en bougeant la souris. Si tu veux, tu peux utiliser le code suivante pour définir une liste de GUI autorisés à être déplacés : - Code:
-
// Cette fonction retournera TRUE si le GUI est déplaçable, FALSE sinon bool Movable(this GUI*) { if (this == gInterface1) return true; if (this == gInterface2) return true; // Ajoute une ligne comme ça pour chaque GUI déplaçable return false; }
// Ces variables vont respectivement noter la position X, la position Y de la souris et le numéro du GUI survolé int PosGUI_x, PosGUI_y, PosGUI_on; function repeatedly_execute() { // On récupère l'éventuel élément de GUI que survole la souris GUIControl* ctrl = GUIControl.GetAtScreenXY(mouse.x, mouse.y); // Tant que la souris survole un élément de GUI, PosGUI_on vaut -1 : // l'utilisateur ne peut pas déplacer le GUI (évite les conflits avec les sliders) if ((ctrl != null) && (!PosGUI_on)) PosGUI_on = -1; // Si on relâche le bouton de la souris, PosGUI_on vaut 0 : // l'utilisateur pourra recliquer pour déplacer à nouveau if ((!Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on)) PosGUI_on = 0; // Si PosGUI_on > 0, alors c'est que l'utilisateur est en train de déplacer // le GUI numéro PosGUI_on-1 (le premier GUI étant le GUI numéro 0) if (PosGUI_on > 0) { // legui pointe sur le GUI que l'utilisateur déplace (PosGUI_on-1) GUI* legui = gui[PosGUI_on - 1]; // On vérifie tout de même que le GUI PosGUI_on-1 existe bien // Et si l'utilisateur a déplacé la souris depuis le dernier cycle... if ((legui != null) && ((mouse.x != PosGUI_x) || (mouse.y != PosGUI_y))) { // ... on déplace le GUI à la nouvelle position... legui.SetPosition(legui.X + (mouse.x - PosGUI_x), legui.Y + (mouse.y - PosGUI_y)); // ... et on indique où est la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } } // Si l'utilisateur a cliqué et qu'il a le droit de déplacer le GUI (PosGUI_on > -1)... else if ((Mouse.IsButtonDown(eMouseLeft)) && (PosGUI_on > -1)) { // ... on récupère l'éventuel GUI sur lequel l'utilisateur a cliqué... GUI* alecran = GUI.GetAtScreenXY(mouse.x, mouse.y); // ... et s'il a bien cliqué sur un GUI... if (alecran != null && alecran.Movable()) { // ... on retient le numéro du GUI (+ 1) dans PosGUI_on... PosGUI_on = alecran.ID + 1; // ... et les coordonnées où se trouve la souris à ce cycle dans PosGUI_x et PosGUI_y PosGUI_x = mouse.x; PosGUI_y = mouse.y; } // Si le clic était hors d'un GUI, le joueur devra relâcher le clic // avant de pouvoir recliquer pour déplacer le GUI else PosGUI_on = -1; } } _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
| | | hanakin Cliqueur Amateur
Nombre de messages : 492
Age : 59
Localisation : Angers
Date d'inscription : 12/09/2012
| Sujet: Re: GUI déplaçables Jeu 6 Nov 2014 - 18:02 | |
| Merci de ta réponse j'avais pas les lignes jusqu' a 6 ? Va falloir que je m'achète des lunettes Pour le repetly execute effectivement j'ai tout faut je l'ai mis dans celui du global script _________________ Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. ( Spock)
Dernière édition par hanakin le Jeu 6 Nov 2014 - 18:19, édité 4 fois |
| | | Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: Re: GUI déplaçables Jeu 6 Nov 2014 - 18:06 | |
| - hanakin a écrit:
- Merci de ta réponse j'avais pas les lignes jusqu' a 6 ?
Va falloir que je m'achète des lunettes Non c'est moi qui te propose ce nouveau code, étant donné que tu souhaites pouvoir définir un ensemble restreint de GUI déplaçables. Rassure-toi, ta vue n'est pas en cause - hanakin a écrit:
- Pour le repetly execute effectivement j'ai tout faut le l'ai mis dans celui du global script
Donc c'est bon, ça marche maintenant ? _________________ Ga is Ga Vous pouvez consulter l' aide d'AGS 3.2 en français et contribuer à la traduction et à l'amélioration si le cœur vous en dit ! |
| | | hanakin Cliqueur Amateur
Nombre de messages : 492
Age : 59
Localisation : Angers
Date d'inscription : 12/09/2012
| Sujet: Re: GUI déplaçables Jeu 6 Nov 2014 - 18:19 | |
| Merci C'est bon ça marche C'est vraiment extra et très pratique _________________ Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. ( Spock) |
| | | filoulefilou Cliqueur Amateur
Nombre de messages : 359
Date d'inscription : 24/05/2010
| Sujet: Re: GUI déplaçables Jeu 18 Déc 2014 - 18:06 | |
| Moi j'ai un problème, il me dit :
GlobalScript.asc(2): Error (line 2): 'this' must be followed by a struct name
Rien dit <3 |
| | | Contenu sponsorisé
| Sujet: Re: GUI déplaçables | |
| |
| | | | GUI déplaçables | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |