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

Partagez | 
 

 Slide inventory ?

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Ravaillac
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 428

Age : 33

Localisation : Montpellier

Date d'inscription : 16/07/2006


MessageSujet: Slide inventory ?   Mer 7 Juin 2017 - 4:58

Bien le bonjour à tous !
Après un an d'absence, je reviens parmi vous (plus résolu que jamais) car j'aurais désormais plus de temps pour me réatteler à la création d'un jeu pendant les vacances. Contrairement aux années précédentes où j'étais fort découragé, j'ai enfin décidé (pas plus tard qu'avant hier) de me mettre au script (ce qui, avant, me rebutait beaucoup) et après avoir tapé quelques lignes de codes simples pour faire mes premiers tests je me rends compte que ce n'est apparemment pas si sorcier que ça ^^ (et j'y ai même pris du plaisir!)

J'ai donc commencé avec un "empty game" afin de tout créer moi-même pas à pas, car j'ai peur qu'un template tout prémâché me pose problème par la suite question script. Je m'aide cependant de divers templates glanés ça et là sur le net, ouverts en même temps que mon projet, pour voir comment c'est torché, et bien sûr... De mon forum préféré !!

Une des premières choses que je souhaiterais mettre en place au niveau de l'interface est un inventaire de type "slide" comme dans le template xALARCOST... une sorte de menu déroulant qui s'anime de haut en bas pour laisser apparaître les objets de mon perso...

J'ai eu beau regarder le script pendant facile une journée pour comprendre, mais je bloque: Je ne sais pas trop par où commencer et je ne pige pas bien le pourquoi du comment.

En effet, qu'est-il nécessaire de taper dans le script pour obtenir un tel résultat ?

Si ce n'est pas trop demander, j'ai quand même une idée précise de ce que je veux et de ce que je ne veux pas... Je voudrais également avoir un inventaire de type Sam&Max, dans la mesure où je veux que lorsqu'un objet est récupéré, l'objet se place automatiquement au premier emplacement vide... Et que le joueur puisse, au cours du jeu, placer ses objets à tel ou tel endroit de l'inventaire, cela est très important pour moi car j'ai pour habitude de faire ainsi lorsque je joue à un pointnclick, pour classer mes items. Je voudrais ensuite que si l'objet est glissé-déposé entre deux autres, il se place automatiquement à cet endroit une fois le clic gauche relâché. De plus, j'aimerais qu'un scroll s'effectue à gauche ou à droite simplement en survolant des flèches, avec ou sans objet, sans avoir besoin d' "appuyer" sur celles-ci. Enfin, je ne veux pas du fameux système où l'objet utilisé récemment se retrouve dans le curseur parmi les clicks droits "de base" comme "j'observe", "je prends", "j'utilise" ou "parle à"... Cependant, j'aimerais savoir quel script permet de le faire, ne serait-ce que pour voir si en jouant ça manque (ou pas). Personnellement j'ai toujours trouvé cela un peu laborieux comme principe lorsque je joue.

Voilà, j'espère ne pas vous avoir soûlé... En vous remerciant !! sourire

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2510

Date d'inscription : 01/08/2006


MessageSujet: Re: Slide inventory ?   Mer 7 Juin 2017 - 21:13

Salut Ravaillac,

Heureux d'apprendre que tu es de retour avec un nouveau projet !

Il me semble que la fonction slide que tu veux a déjà été discutée une ou deux fois sur le forum, mais je sais plus où exactement. L'idée de base est assez simple : tu définis par défaut la coordonnée Y de ton GUI de façon à ce qu'il se trouve en-dehors de l'écran (par le haut). Par exemple si la hauteur de ton GUI est 50, sa coordonnée Y devrait être -50.
Ensuite, dans une fonction repeatedly_execute, tu vérifies la valeur de mouse.y : si celle-ci est inférieure à 50 (c'est-à-dire qu'elle se trouve là où le GUI devrait être après déroulement) et si la coordonnée Y du GUI est inférieure à 0, alors tu ajoutes 1 à cette coordonnée. Puisque ce code est exécuté à chaque cycle de jeu, après 50 cycles avec le curseur en haut de l'écran, le GUI va avoir défilé de 50 vers le bas, et le tour est joué.
Tu dois aussi ajouter une condition qui vérifie que si mouse.y est supérieure à 50, alors le GUI devrait retourner à -50 (soit de façon progressive comme pour l'affichage, auquel cas la condition doit aussi stipuler que la coordonnée Y du GUI est supérieure à -50 ; soit instantanément auquel cas tu redéfinis purement et simplement la coordonnée à -50 dans cette condition).

En ce qui concerne le placement dans l'inventaire, la première fonctionnalité devrait être assez facile à implémenter. Si tu regardes la définition de la commande AddInventory, tu verras qu'il y a un paramètre optionnel qui définit la position où doit être ajouté l'objet. Passe la valeur 0 et l'objet sera ajouté au tout début.

Pour ce qui est de la fonction glisser/déposer dans l'inventaire, c'est un peu plus compliqué, car il faut détecter quel objet se trouve sous la coordonnée de la souris au moment du relâchement du clic. Pour ce faire, j'ai écrit une petite fonction qui te donnera le numéro de la position de l'objet survolé, que tu peux ensuite passer AddInventory. Assure-toi juste que la valeur retournée est supérieure à -1 avant de la passer comme argument.
Code:
int InventoryPosition() {
  // On vérifie que la souris survole bien un objet d'inventaire
  InventoryItem* item = InventoryItem.GetAtScreenXY(mouse.x, mouse.y);
  // Si ce n'est pas le cas, on retourne -1
  if (item == null) return -1;
  // On récupère le contrôle de GUI (fenêtre d'invenaitre) survolé
  GUIControl* control = GUIControl.GetAtScreenXY(mouse.x, mouse.y);
  // On convertit control en une variable InvWindow (fenêtre d'inventaire)
  InvWindow* invWin = control.AsInvWindow;
  // On va vérifier chaque case de cette fenêtre et vérifier si elle contient l'objet qu'on survole
  int i = 0;
  while (i < invWin.ItemCount) {
      // Si la i-ème case contient l'objet, on retourne i
      if (invWin.ItemAtIndex[i] == item) return i;
      i++;
  }
  // Si pour une raison inexplicable on n'a pas trouvé l'objet dans la fenêtre, on retourne -1
  return -1;
}

Enfin le scroll gauche ou droite repose un peu sur un principe qui mélange les deux points précédents. Dans repeatedly_execute, tu vérifies le bouton qui se trouve aux positions de la souris (regarde comment je fais pour la fenêtre d'inventaire dans le code ci-haut, c'est le même raisonnement mais avec  AsButton plutôt que AsInvWindow). Si le bouton correspond au bouton pour faire défiler l'inventaire, tu appelles la fonction ScrollDown ou ScrollUp (selon ce qui est approprié).

_________________
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
Arlann
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar

Nombre de messages : 176

Date d'inscription : 06/04/2016


MessageSujet: Re: Slide inventory ?   Dim 11 Juin 2017 - 21:14

Salut Ravaillac, j'espère que ton projet avance comme tu veux.

J'ai justement créé un inventaire "glissé/déposé" pour mon nouveau projet top secret...

J'ai donc essayé de l'adapter (et de l'améliorer ) avec la fonction proposée par Kitai pour le convertir en inventaire modulable.

Le script suivant suppose que ton inventaire se trouve dans un gui appelé gInventory et que tu aies créé un gui gItem qui simulera l'effet glissé/déposé.

Code:

// Créer un nouveau gui gItem pour simuler l'effet glissé/déposé
// Changer ses paramètres  BackgroundColorNumber et BorderColorNumber à 0  (ou à votre convenance).

InventoryItem *itemOrigine ;
int idItemOrigine, idItemDestination ;
  
function game_start() {
  gItem.Clickable = false ;
  gItem.BackgroundGraphic = 0;
  gItem.Visible = false ;
  gItem.ZOrder = gInventory.ZOrder+1; // En supposant que le gui inventaire s'appelle gInventory
  gItem.Transparency = 0; // A varier si l'on veut une transparence sur l'effet glissé/déposé.
}

int InventoryPosition() { // La fonction de Kitai pour récupérer la position des objets
  InventoryItem* item = InventoryItem.GetAtScreenXY(mouse.x, mouse.y);
  if (item == null) return -1;
  GUIControl* control = GUIControl.GetAtScreenXY(mouse.x, mouse.y);
  InvWindow* invWin = control.AsInvWindow;
  gItem.Width = invWin.ItemWidth ;
  gItem.Height = invWin.ItemHeight ;
  int i = 0;
  while (i < invWin.ItemCount) {
      if (invWin.ItemAtIndex[i] == item) return i;
      i++;
  }
  return -1;
}

void MoveItem(InventoryItem* itemDestination) { // La fonction qui déplace les objets
  idItemDestination = InventoryPosition();
  if ( (idItemOrigine == -1 || idItemDestination == -1) || (idItemOrigine == idItemDestination) ) return;
  else {
    player.LoseInventory(itemDestination);
    player.LoseInventory(itemOrigine);
    if (idItemOrigine > idItemDestination) player.AddInventory(itemOrigine, idItemDestination);
    player.AddInventory(itemDestination, idItemOrigine);
    if (idItemOrigine < idItemDestination) player.AddInventory(itemOrigine, idItemDestination);
    Mouse.Mode = eModeInteract;   // Une fois l'objet déposé le curseur retourne sur sa position initiale //
    Mouse.UseModeGraphic(eModePointer); // A changer selon le type d'interface désirée.
  }
}

function repeatedly_execute()  {
  GUI *theGui = GUI.GetAtScreenXY(mouse.x, mouse.y);
  if ( theGui == gInventory ) { // En supposant que le gui inventaire s'appelle gInventory
    InventoryItem *itemSurvol = InventoryItem.GetAtScreenXY(mouse.x, mouse.y);
    if ( Mouse.IsButtonDown(eMouseLeft) ) { // Quand on maintient le clic de la souris pour glisser l'objet.
      if ( gItem.Visible == false && itemSurvol != null && Mouse.Mode == eModeInteract ) { // Le mode de souris nécessaire pour déclencher le glissé/déposé est à changer ou supprimer selon votre convenance.
        itemOrigine = itemSurvol ;
        gItem.BackgroundGraphic = itemOrigine.Graphic;
        idItemOrigine = InventoryPosition();
        gItem.Visible = true ;
      }
      if ( gItem.Visible == true ) {
        gItem.X = mouse.x - gItem.Width / 2 ;  // centre l'objet glissant sur le curseur
        gItem.Y = mouse.y - gItem.Height  /2 ; // centre l'objet glissant sur le curseur
      }
    }
    else if ( gItem.Visible == true ) { // Quand on relâche l'objet pour le déposer.
      gItem.Visible = false ;
      if ( itemSurvol != null ) MoveItem(itemSurvol); // Si la souris se trouve sur un autre objet la fonction intervertira leurs positions.
    }
  }
  else if ( gItem.Visible==true ) gItem.Visible = false ;
}

J'espère que cela fonctionne correctement ! N'hésite pas à me dire si cela te convient.
Bon développement.


Dernière édition par Arlann le Lun 12 Juin 2017 - 10:00, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Ravaillac
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 428

Age : 33

Localisation : Montpellier

Date d'inscription : 16/07/2006


MessageSujet: Re: Slide inventory ?   Lun 12 Juin 2017 - 6:34

Merci à vous deux !! cool

Cependant j'ai pas eu trop le temps de m'y pencher dessus, faut dire aussi que je suis de nouveau un peu découragé dans la mesure où il me manque encore des connaissances pour arriver à mettre en place le truc: En lisant le com de Kitai ça me parle vaguement mais je ne sais pas du tout par où commencer. perplexe Je suis tout débutant en script  perplexe

Qu'entends-tu par inventaire "modulable" ?

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Arlann
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar

Nombre de messages : 176

Date d'inscription : 06/04/2016


MessageSujet: Re: Slide inventory ?   Lun 12 Juin 2017 - 7:45

Je répondais à cette demande précise:
Ravaillac a écrit:

Je voudrais ensuite que si l'objet est glissé-déposé entre deux autres, il se place automatiquement à cet endroit une fois le clic gauche relâché.

Avec ce script tu peux glisser un objet (item) en maintenant le clic gauche de la souris et le déposer sur un autre pour échanger leurs places.

Je me rends compte que j'avais lu trop vite ta requête, car tu voulais que l'item déplacé s'insert entre les autres et non pas qu'ils échangent leurs places.

Dans ce cas c'est encore plus simple :  clin d\\\\'oeil

Code:
// Créer un nouveau gui gItem pour simuler l'effet glissé/déposé
// Changer ses paramètres  BackgroundColorNumber et BorderColorNumber à 0  (ou à votre convenance).

InventoryItem *itemOrigine ;
  
function game_start() {
  gItem.Clickable = false ;
  gItem.BackgroundGraphic = 0;
  gItem.Visible = false ;
  gItem.ZOrder = gInventory.ZOrder+1; // En supposant que le gui inventaire s'appelle gInventory
  gItem.Transparency = 0; // A varier si l'on veut une transparence sur l'effet glissé/déposé.
}

int InventoryPosition() { // La fonction de Kitai pour récupérer la position des objets
  InventoryItem* item = InventoryItem.GetAtScreenXY(mouse.x, mouse.y);
  if (item == null) return -1;
  GUIControl* control = GUIControl.GetAtScreenXY(mouse.x, mouse.y);
  InvWindow* invWin = control.AsInvWindow;
  int i = 0;
  while (i < invWin.ItemCount) {
      if (invWin.ItemAtIndex[i] == item) return i;
      i++;
  }
  return -1;
}

void MoveItem() { // La fonction qui déplace les objets
  player.LoseInventory(itemOrigine);
  player.AddInventory(itemOrigine, InventoryPosition());
  Mouse.Mode = eModeInteract;   // Une fois l'objet déposé le curseur retourne sur sa position initiale //
  Mouse.UseModeGraphic(eModePointer); // A changer selon le type d'interface désirée.
}

function repeatedly_execute()  {
  GUI *theGui = GUI.GetAtScreenXY(mouse.x, mouse.y);
  if ( theGui == gInventory ) { // En supposant que le gui inventaire s'appelle gInventory
    InventoryItem *itemSurvol = InventoryItem.GetAtScreenXY(mouse.x, mouse.y);
    if ( Mouse.IsButtonDown(eMouseLeft) ) { // Quand on maintient le clic de la souris pour glisser l'objet.
      if ( gItem.Visible == false && itemSurvol != null && Mouse.Mode == eModeInteract ) { // Le mode de souris nécessaire pour déclencher le glissé/déposé est à changer ou supprimer selon votre convenance.
        itemOrigine = itemSurvol ;
        GUIControl* control = GUIControl.GetAtScreenXY(mouse.x, mouse.y);
        InvWindow* invWin = control.AsInvWindow;
        gItem.Width = invWin.ItemWidth ;
        gItem.Height = invWin.ItemHeight ;
        gItem.BackgroundGraphic = itemOrigine.Graphic;
        gItem.Visible = true ;
      }
      if ( gItem.Visible == true ) {
        gItem.X = mouse.x - gItem.Width / 2 ;  // centre l'objet glissant sur le curseur
        gItem.Y = mouse.y - gItem.Height /2 ; // centre l'objet glissant sur le curseur
      }
    }
    else if ( gItem.Visible == true ) { // Quand on relâche l'objet pour le déposer.
      gItem.Visible = false ;
      if ( itemSurvol != null && itemSurvol != itemOrigine) MoveItem(); // Si la souris se trouve sur un autre objet la fonction insérera l'objet glissé à cette position.
    }
  }
  else if ( gItem.Visible==true ) gItem.Visible = false ;
}
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Ravaillac
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 428

Age : 33

Localisation : Montpellier

Date d'inscription : 16/07/2006


MessageSujet: Re: Slide inventory ?   Mar 13 Juin 2017 - 3:53

Merci Arlann pour ton aide; je vais regarder ça de plus près au plus vite... Mais je suis bloqué à cette étape:

Kitai a écrit:
Ensuite, dans une fonction repeatedly_execute, tu vérifies la valeur de mouse.y : si celle-ci est inférieure à 50 (c'est-à-dire qu'elle se trouve là où le GUI devrait être après déroulement) et si la coordonnée Y du GUI est inférieure à 0, alors tu ajoutes 1 à cette coordonnée. Puisque ce code est exécuté à chaque cycle de jeu, après 50 cycles avec le curseur en haut de l'écran, le GUI va avoir défilé de 50 vers le bas, et le tour est joué.
Tu dois aussi ajouter une condition qui vérifie que si mouse.y est supérieure à 50, alors le GUI devrait retourner à -50 (soit de façon progressive comme pour l'affichage, auquel cas la condition doit aussi stipuler que la coordonnée Y du GUI est supérieure à -50 ; soit instantanément auquel cas tu redéfinis purement et simplement la coordonnée à -50 dans cette condition).

Le truc c'est que quand je suis dans le script, il n'y a absolument rien en dessous de repeatedly_execute, du coup j'ai beau chercher, je ne vois pas comment faire pour modifier les coordonnées.

Par contre une question: Dois-je modifier les dimensions de l'image de ma room ? Ou est-ce que ces notions se trouvent juste rattachées au curseur et rien qu'à lui ?

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Arlann
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar

Nombre de messages : 176

Date d'inscription : 06/04/2016


MessageSujet: Re: Slide inventory ?   Mer 14 Juin 2017 - 19:14

Ravaillac a écrit:
Le truc c'est que quand je suis dans le script, il n'y a absolument rien en dessous de repeatedly_execute, du coup j'ai beau chercher, je ne vois pas comment faire pour modifier les coordonnées.

Si tu pars d'un template vide le but est bien de tout coder toi même ! Ce que te propose Kitai est de faire quelque chose comme ceci :
Code:
function repeatedly_execute()
{
  if ( mouse.y > 150 && gInventory.Y > 150 ) gInventory.Y -- ;
  else if ( mouse.y < 150 && gInventory.Y < 199 ) gInventory.Y ++ ;
}
Les coordonnées et le gui sont bien entendu à changer en fonction de ton interface.
Ravaillac a écrit:

Par contre une question: Dois-je modifier les dimensions de l'image de ma room ? Ou est-ce que ces notions se trouvent juste rattachées au curseur et rien qu'à lui ?
Pour l'interface, les coordonnées x y de la souris correspondent à la définition de ton jeu, pas à celle de tes rooms (qui peuvent être plus grandes et donc en scrolling).
Si tu dois par la suite scripter des événements en fonction de la position de la souris dans une pièce en scrolling tu devras compenser les coordonnées avec les fonctions GetViewportX() et GetViewportY(), mais pour l'instant cela n'est pas nécessaire.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Ravaillac
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 428

Age : 33

Localisation : Montpellier

Date d'inscription : 16/07/2006


MessageSujet: Re: Slide inventory ?   Jeu 15 Juin 2017 - 3:16

Arlann a écrit:
Si tu pars d'un template vide le but est bien de tout coder toi même !

Oui, je me suis mal exprimé... ce que je voulais dire c'est "j'ai beau chercher dans le forum ou dans certains templates pour voir comment c'est foutu, je ne vois pas comment on fait"

Cependant j'ai essayé ton script, et on se rapproche un peu de ce que je recherche mais ce n'est pas trop ça. Faut dire que je ne comprends pas vraiment ce que je dois mettre comme chiffres (mon inventaire étant une barre de 1920x106) dans la mesure où je ne sais pas ce qui correspond à quoi.

Avec ce que j'ai rentré, ma barre est bien en haut au départ, et quand je passe la souris elle fait effectivement un slide, mais laisse du coup de la transparence lorsqu'elle descend. De plus le slide est beaucoup trop lent à mon goût et surtout: elle reste dans la position finale même quand la souris ne passe pas dessus. A noter aussi que si j'enlève la souris de cette barre pendant le slide la barre s'immobilise dans sa position, ne descendant pas complètement.

Je suis assez surpris qu'un truc aussi simple de prime abord soit aussi compliqué à mettre en place. Ce qui m'énerve c'est que lorsque je regarde les scripts des templates qui ont ce système-là pour m'aider et le refaire dans mon template vide, c'est que je ne vois absolument pas comment ça marche. J'espère que ma demande est très spécifique et que lorsque j'aurais fini de faire cet inventaire ce ne sera pas la même pour chaque truc que je veux faire.  pleure

A+ les amis, merci encore !! clin d\\\\'oeil

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Arlann
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar

Nombre de messages : 176

Date d'inscription : 06/04/2016


MessageSujet: Re: Slide inventory ?   Jeu 15 Juin 2017 - 17:42

Ravaillac a écrit:
Cependant j'ai essayé ton script, et on se rapproche un peu de ce que je recherche mais ce n'est pas trop ça. Faut dire que je ne comprends pas vraiment ce que je dois mettre comme chiffres (mon inventaire étant une barre de 1920x106) dans la mesure où je ne sais pas ce qui correspond à quoi.
Si j'ai bien compris, ton jeu est en 1920*1080, donc les coordonnées X sont comprises entre 0 et 1920 et les Y entre 0 et 1080. À partir de là ce n'est qu'une histoire d'abscisse et d'ordonnée sachant que l'origine 0 est en haut à gauche.

Ravaillac a écrit:
Avec ce que j'ai rentré, ma barre est bien en haut au départ, et quand je passe la souris elle fait effectivement un slide, mais laisse du coup de la transparence lorsqu'elle descend.
Qu'entends-tu par "laisse de la transparence" ?
Ravaillac a écrit:
De plus le slide est beaucoup trop lent à mon goût
Comme les coordonnées du gui sont redéfinies dans le repeatedly execute à chaque cycle de rafraichissement (40 fois par seconde par défaut) il te suffit de choisir de combien de "pixel" tu le déplace à chaque fois.  
Par exemple : gInventory.Y -= 5 ; pour glisser en bas de 5 px à chaque cycle  ou gInventory.X += 10 ; pour glisser à gauche de 10 px...

Ravaillac a écrit:
J'espère que ma demande est très spécifique et que lorsque j'aurais fini de faire cet inventaire ce ne sera pas la même pour chaque truc que je veux faire.  pleure
Créer une interface complète est un bon exercice pour apprendre la logique des scripts, pour la suite tout dépend à quel point le gameplay que tu imagines s'éloigne des fonctions de bases proposées par AGS... Quelquefois en voulant juste améliorer une petite chose on doit entièrement écrire ses propres fonctions, mais on peut également développer un jeu complet avec les fonctions déjà existantes.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2510

Date d'inscription : 01/08/2006


MessageSujet: Re: Slide inventory ?   Jeu 15 Juin 2017 - 18:57

Arlann a écrit:
Ravaillac a écrit:
Avec ce que j'ai rentré, ma barre est bien en haut au départ, et quand je passe la souris elle fait effectivement un slide, mais laisse du coup de la transparence lorsqu'elle descend.
Qu'entends-tu par "laisse de la transparence" ?
Le GUI de Ravaillac fait 106 de hauteur, donc je pense que la transparence fait référence au fait qu'avec le code actuel, le GUI se déplace 44 pixels trop bas. Pour résoudre ce problème il suffit de remplacer tous les '150' du code par des '106'.

Ravaillac a écrit:
elle reste dans la position finale même quand la souris ne passe pas dessus. A noter aussi que si j'enlève la souris de cette barre pendant le slide la barre s'immobilise dans sa position, ne descendant pas complètement.
Essaye de remplacer le else if dans le repeatedly_execute de Arlann (ligne 4) par un simple if.

Ravaillac a écrit:
Je suis assez surpris qu'un truc aussi simple de prime abord soit aussi compliqué à mettre en place. Ce qui m'énerve c'est que lorsque je regarde les scripts des templates qui ont ce système-là pour m'aider et le refaire dans mon template vide, c'est que je ne vois absolument pas comment ça marche. J'espère que ma demande est très spécifique et que lorsque j'aurais fini de faire cet inventaire ce ne sera pas la même pour chaque truc que je veux faire.  pleure
Ça paraît compliqué de prime abord, mais une fois que tu comprends bien le mécanisme, l'effet et la signification de chaque instruction, tout s'éclaire. À partir de là, les problèmes que tu pourras rencontrer deviendront davantage des énigmes à résoudre avec les outils et le savoir dont tu disposes, c'est généralement très stimulant clin d\\\\'oeil

_________________
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
Ravaillac
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 428

Age : 33

Localisation : Montpellier

Date d'inscription : 16/07/2006


MessageSujet: Re: Slide inventory ?   Jeu 15 Juin 2017 - 19:50

pour ce qui est de cette histoire de transparence, Kitai a effectivement compris (je crois).
Là encore je me suis mal exprimé: ce que je veux dire c'est que ma barre descend et laisse un espace en haut : elle continue à descendre et, comme elle fait 106 de hauteur seulement et pas plus, si 150 sont écrits en code il y a donc un espace de 44 pixels.

Sinon même en entrant 106 (ce que j'ai fait dès le début) bah ma barre laisse cet espace en haut, et si je remplace else if par if: la barre reste bloquée dans cette position "baissée" et lorsque j'enlève le curseur rien n'y fait.

Cependant si ça peut aider, je constate à l’œil que l'espace laissé lorsque le slide s'effectue est exactement de la même hauteur que la barre. 106 donc.

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Ravaillac
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 428

Age : 33

Localisation : Montpellier

Date d'inscription : 16/07/2006


MessageSujet: Re: Slide inventory ?   Jeu 15 Juin 2017 - 20:08

J'ai scripté comme suit:

Code:
function repeatedly_execute()
{
  if ( mouse.y > 106 && gInventory.Y > 0 ) gInventory.Y -- ;
  if ( mouse.y < 106 && gInventory.Y < 106 ) gInventory.Y ++ ;
}

Et j'ai accidentellement trouvé comment faire revenir la barre à sa place initiale lorsque le curseur n'est plus dessus.
(et si je remplace le deuxième "if" par "else if" cela fait visiblement la même chose. Du moins graphiquement parlant)

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue
avatar

Nombre de messages : 2510

Date d'inscription : 01/08/2006


MessageSujet: Re: Slide inventory ?   Jeu 15 Juin 2017 - 20:19

Ravaillac a écrit:
J'ai scripté comme suit:

Code:
function repeatedly_execute()
{
  if ( mouse.y > 106 && gInventory.Y > 0 ) gInventory.Y -- ;
  if ( mouse.y < 106 && gInventory.Y < 106 ) gInventory.Y ++ ;
}

Et j'ai accidentellement trouvé comment faire revenir la barre à sa place initiale lorsque le curseur n'est plus dessus.
(et si je remplace le deuxième "if" par "else if" cela fait visiblement la même chose. Du moins graphiquement parlant)
En effet :

  1. Le premier if devait conditionner sur le GUI étant visible (Y>0) et non pas sur le GUI étant à sa position finale (Y>=106), auquel cas l'instruction (gInventory.Y--) ne s'exécute que le temps de faire remonter le GUI d'un seul pixel
  2. Avoir if ou else if ici ne change rien : les deux conditions exprimées sont incompatibles l'une avec l'autre. Je sais pas ce qui m'est passé par la tête quand j'ai suggéré de remplacer else if par if.


EDIT : maintenant que j'y pense, je suis surpris que ce code fonctionne (presque) comme tu l'entends. La coordonnée Y du GUI correspond au bord supérieur, et donc le code me semblerait devoir être le suivant :
Code:
function repeatedly_execute()
{
  if ( mouse.y > 106 && gInventory.Y > -106 ) gInventory.Y -- ;
  else if ( mouse.y < 106 && gInventory.Y < 0 ) gInventory.Y ++ ;
}

_________________
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
Ravaillac
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 428

Age : 33

Localisation : Montpellier

Date d'inscription : 16/07/2006


MessageSujet: Re: Slide inventory ?   Jeu 15 Juin 2017 - 20:33

En effet: Merci ça fonctionne nickel !
En revanche je n'ai toujours pas compris quel chiffre correspond à quoi (enfin un peu mieux maintenant) ni ce que signifient ces lignes de codes perplexe

Je vais maintenant essayer de régler ce problème de lenteur

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Arlann
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar

Nombre de messages : 176

Date d'inscription : 06/04/2016


MessageSujet: Re: Slide inventory ?   Ven 16 Juin 2017 - 9:45

Une petite explication de texte pour comprendre comment ça marche.

La fonction se répète à chaque cycle de jeu :
SI la position Y (ordonnée) de la souris est supérieure à 106 (elle n'est pas vers le haut de l'écran)
ET QUE la position Y de l’inventaire est supérieure à -106 (donc il est visible puisque sa position "en place" est à 0),  
la position Y de l’inventaire diminue de 1 pixel à chaque cycle (il remonte jusqu'à -106 et sort totalement de l'écran puisque le gui fait 106 pixels de hauteur)

SINON, SI la position Y (ordonnée) de la souris est inférieure à 106
ET QUE la position Y de l’inventaire est  inférieure à 0,
la position Y de l’inventaire augmente de 1 pixel à chaque cycle (donc il se place correctement en haut de l’écran).

Comme je l’ai expliqué plus haut, la vitesse variera selon le nombre de pixels que tu décides de changer sur la position de l’inventaire à chaque cycle,
sachant que gInventory.Y -- ; et  gInventory.Y ++ ; sont des raccourcis pour dire gInventory.Y -=1 ; et gInventory.Y +=1 ;
A toi de jouer clin d\\\\'oeil
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Ravaillac
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 428

Age : 33

Localisation : Montpellier

Date d'inscription : 16/07/2006


MessageSujet: Re: Slide inventory ?   Ven 16 Juin 2017 - 11:34

Ahah !!

Merci Arlann c'est un peu plus clair pour moi.
Mais j'y vais à tâtons car j'ai toujours été très nul en mathématique & calculs simples.
J'arrive toujours pas à comprendre selon les chiffres négatifs ou positifs si ça va vers le bas ou vers le haut.
Ajoutons à cela des > ou des < et aïe aïe aïe là pour moi y'a trop de données d'un coup...
Car si machin est positif mais supérieur à moins bidule cela accélère ou pas de moins truc etc...
Je caricature mais oups me voilà tout embrouillé triste
Cependant j'ai enfin compris ce que signifie chaque ligne. Et en effet comme le disait Kitai c'est bel et bien stimulant clin d\\\\'oeil

Entre temps j'ai customisé la tronche de mon inventaire comme ceci:



Il fait 580x276 et je suis arrivé sans difficulté à le placer au milieu de l'écran. J'imagine que je devrais donc modifier par la suite mouse.x et aussi gInventory.x vu que je ne suis plus à 1920 , mais je verrai ça plus tard, chaque chose en son temps. ^^

Avec le code suivant il remonte à vitesse souhaitée lorsque le curseur le quitte mais descend d'un coup sans "anim" lorsque le curseur va en haut de l'écran.

Code:
function repeatedly_execute()
{
  if ( mouse.y > 276 && gInventory.Y > -276 ) gInventory.Y -=10 ;
  else if ( mouse.y < 276 && gInventory.Y < 0 ) gInventory.Y =10 ;
}

Et comme un problème ne vient jamais seul, lorsque la souris est en haut, il est effectivement en entier, mais un poil trop vers le bas (il y a un espace "transparent" au-dessus des chaînes).

Désolé de vous ennuyer encore mais : qu'est-ce qui cloche exactement ???

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Arlann
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar

Nombre de messages : 176

Date d'inscription : 06/04/2016


MessageSujet: Re: Slide inventory ?   Ven 16 Juin 2017 - 12:34

Tu as fait une erreur d'opérateur sur la ligne 4, il manque le + pour faire gInventory.Y +=10 ; .
Cela devrait régler les deux problèmes d'un coup !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Ravaillac
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 428

Age : 33

Localisation : Montpellier

Date d'inscription : 16/07/2006


MessageSujet: Re: Slide inventory ?   Ven 16 Juin 2017 - 12:36

Hé hé !! Oui c'était bien cela

_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Ravaillac
Cliqueur Amateur
Cliqueur Amateur
avatar

Nombre de messages : 428

Age : 33

Localisation : Montpellier

Date d'inscription : 16/07/2006


MessageSujet: Re: Slide inventory ?   Ven 16 Juin 2017 - 12:48

Merci encore pour votre patience !!

Par contre:

-Comment fait-on pour changer la position de départ du curseur au lancement du jeu ?
Car là il me le met en haut ce qui fait que mon inventaire est déjà déroulé au départ, ce que je ne veux pas...
(Je voudrais avoir le curseur au milieu, par exemple.)

-Comment scripter pour ne prendre en compte que la zone de l'inventaire sur les x à savoir qu'il est placé à top: 640 et qu'il fait 580 de largeur ? (et 276 de hauteur)
J'ai essayé de coder en suivant l'exemple des y mais c'est chaud je n'y arrive pas. rougit


_________________
L' est si forte à la course qu'elle en sort de la phrase.  autruche
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Arlann
Adepte de la Grande Tasse Bleue
Adepte de la Grande Tasse Bleue
avatar

Nombre de messages : 176

Date d'inscription : 06/04/2016


MessageSujet: Re: Slide inventory ?   Sam 17 Juin 2017 - 18:24

Ravaillac a écrit:

-Comment fait-on pour changer la position de départ du curseur au lancement du jeu ?
Car là il me le met en haut ce qui fait que mon inventaire est déjà déroulé au départ, ce que je ne veux pas...
(Je voudrais avoir le curseur au milieu, par exemple.)

Tu peux utiliser SetPosition dans une fonction game_start, mais tu peux aussi choisir de rendre ton gui d'inventaire invisible par défaut et l'activer toi même par le script plus tard pour ne pas qu'il te dérange pendant une éventuelle séquence d'introduction.

Ravaillac a écrit:

-Comment scripter pour ne prendre en compte que la zone de l'inventaire sur les x à savoir qu'il est placé à top: 640 et qu'il fait 580 de largeur ? (et 276 de hauteur)
J'ai essayé de coder en suivant l'exemple des y mais c'est chaud je n'y arrive pas.  rougit

Je ne comprends pas ce que tu veux faire... zarb
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Slide inventory ?   

Revenir en haut Aller en bas
 
Slide inventory ?
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Comment utiliser le mod "Shop from inventory" ?
» Les jeux Musicaux - La famille GUITAR HERO - ROCKBAND
» Aide Swap Magic pour PS2 slim
» vend slide card + les 2 cd swap magic (dvd et cd) + notice
» Créer un slider personnalisé.

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Adventure Games Studio fr :: CREATION DE JEUX :: Questions / Réponses-
Sauter vers: