Forum d'entraide à la création de jeux d'aventure
 
PortailAccueilFAQRechercherS'enregistrerMembresConnexion

Partagez | 
 

 GUI déplaçables

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2505

Date d'inscription : 01/08/2006


MessageSujet: 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 ! clin d\\\\'oeil
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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Godzillu
Grand Cliqueur Royal
Grand Cliqueur Royal
avatar

Nombre de messages : 1517

Date d'inscription : 11/03/2007


MessageSujet: 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 sourire

_________________
Ma vie, mon oeuvre au jour semestre à la semaine le jour semestre la semaine : http://godzillu.blogspot.fr/
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://godzillu.blogspot.fr/
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2505

Date d'inscription : 01/08/2006


MessageSujet: 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 sourire
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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Alph Eratz
Cliqueur Emérite
Cliqueur Emérite
avatar

Nombre de messages : 861

Age : 53

Localisation : Ca y est Saroumane le multicolor est défait, en route pour le Rohan

Date d'inscription : 22/01/2008


MessageSujet: 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?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://lauvrayarcherie.com
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2505

Date d'inscription : 01/08/2006


MessageSujet: 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 langue)

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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Alph Eratz
Cliqueur Emérite
Cliqueur Emérite
avatar

Nombre de messages : 861

Age : 53

Localisation : Ca y est Saroumane le multicolor est défait, en route pour le Rohan

Date d'inscription : 22/01/2008


MessageSujet: 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;
    }
}

Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://lauvrayarcherie.com
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2505

Date d'inscription : 01/08/2006


MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Alph Eratz
Cliqueur Emérite
Cliqueur Emérite
avatar

Nombre de messages : 861

Age : 53

Localisation : Ca y est Saroumane le multicolor est défait, en route pour le Rohan

Date d'inscription : 22/01/2008


MessageSujet: 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. clin d\\\\'oeil
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."
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://lauvrayarcherie.com
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2505

Date d'inscription : 01/08/2006


MessageSujet: 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 clin d\\\\'oeil

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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
Alph Eratz
Cliqueur Emérite
Cliqueur Emérite
avatar

Nombre de messages : 861

Age : 53

Localisation : Ca y est Saroumane le multicolor est défait, en route pour le Rohan

Date d'inscription : 22/01/2008


MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://lauvrayarcherie.com
Alph Eratz
Cliqueur Emérite
Cliqueur Emérite
avatar

Nombre de messages : 861

Age : 53

Localisation : Ca y est Saroumane le multicolor est défait, en route pour le Rohan

Date d'inscription : 22/01/2008


MessageSujet: 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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://lauvrayarcherie.com
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 52

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: 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)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2505

Date d'inscription : 01/08/2006


MessageSujet: 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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 52

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: 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 sourire

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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2505

Date d'inscription : 01/08/2006


MessageSujet: 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 sourire
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 clin d\\\\'oeil

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 !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://admin.no.uchi.free.fr/dokuwiki-2008-05-05/doku.php
hanakin
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 490

Age : 52

Localisation : Angers

Date d'inscription : 12/09/2012


MessageSujet: Re: GUI déplaçables   Jeu 6 Nov 2014 - 18:19


Merci C'est bon ça marche grand sourire

C'est vraiment extra et très pratique

_________________
Ce qui est utile à beaucoup l'emporte sur les désirs du petit nombre. (Spock)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://dinomania.chez-alice.fr/index.htm
filoulefilou
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 272

Date d'inscription : 24/05/2010


MessageSujet: 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 &lt;3
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: GUI déplaçables   

Revenir en haut Aller en bas
 
GUI déplaçables
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» GUI déplaçables
» Dans quel dossier faut-il plaçer les fichiers obj. ?
» [SCRIPT] Aide pour script de quête s''il vous plaît
» [RP Fermé] S'il vous plait, dessine-moi un Empire...
» Paymo est redevenu comme avant

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Trucs & Astuces, Tutoriaux-
Sauter vers: