| Slide inventory ? | |
|
|
Auteur | Message |
---|
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: 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 !! _________________ L' est si forte à la course qu'elle en sort de la phrase. autruche
|
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: 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 ! |
|
| |
Arlann Cliqueur Amateur
Nombre de messages : 286
Date d'inscription : 06/04/2016
| Sujet: 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 |
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: Re: Slide inventory ? Lun 12 Juin 2017 - 6:34 | |
| Merci à vous deux !! 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. Je suis tout débutant en script Qu'entends-tu par inventaire "modulable" ? _________________ L' est si forte à la course qu'elle en sort de la phrase. autruche
|
|
| |
Arlann Cliqueur Amateur
Nombre de messages : 286
Date d'inscription : 06/04/2016
| Sujet: 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 : - 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 ; } |
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: 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
|
|
| |
Arlann Cliqueur Amateur
Nombre de messages : 286
Date d'inscription : 06/04/2016
| Sujet: 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. |
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: 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. A+ les amis, merci encore !! _________________ L' est si forte à la course qu'elle en sort de la phrase. autruche
|
|
| |
Arlann Cliqueur Amateur
Nombre de messages : 286
Date d'inscription : 06/04/2016
| Sujet: 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.
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. |
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: 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.
Ç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 _________________ 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 ! |
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: 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
|
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: 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
|
|
| |
Kitai Délégué de la tasse bleue
Nombre de messages : 2907
Date d'inscription : 01/08/2006
| Sujet: 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 :
- 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
- 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 ! |
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: 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 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
|
|
| |
Arlann Cliqueur Amateur
Nombre de messages : 286
Date d'inscription : 06/04/2016
| Sujet: 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 |
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: 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é Cependant j'ai enfin compris ce que signifie chaque ligne. Et en effet comme le disait Kitai c'est bel et bien stimulant 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
|
|
| |
Arlann Cliqueur Amateur
Nombre de messages : 286
Date d'inscription : 06/04/2016
| Sujet: 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 ! |
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: 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
|
|
| |
Jorkz Cliqueur Emérite
Nombre de messages : 666
Age : 40
Localisation : Montpellier
Date d'inscription : 16/07/2006
| Sujet: 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. _________________ L' est si forte à la course qu'elle en sort de la phrase. autruche
|
|
| |
Arlann Cliqueur Amateur
Nombre de messages : 286
Date d'inscription : 06/04/2016
| Sujet: 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.
Je ne comprends pas ce que tu veux faire... |
|
| |
Contenu sponsorisé
| Sujet: Re: Slide inventory ? | |
| |
|
| |
| Slide inventory ? | |
|