Night.png);">
Apprendre


Vous êtes
nouveau sur
Oniromancie?

Visite guidée
du site


Découvrir
RPG Maker


Apprendre
RPG Maker

Tutoriels
Guides
Making-of

Dans le
Forum

Section Entraide

Jeux: puie z / Jeux: Citymaime - Chapitre 1 / Jeux: Mer, îles et fous / News: Du neuf dans le making / News: Muma|Rope est disponible en (...) / Chat

Bienvenue
visiteur !




publicité RPG Maker!

Statistiques

Liste des
membres


Contact

Mentions légales

236 connectés actuellement

30737996 visiteurs
depuis l'ouverture

1581 visiteurs
aujourd'hui



Barre de séparation

Partenaires

Indiexpo

Akademiya RPG Maker

Blog Alioune Fall

Fairy Tail Constellations

Leo-Games

Kingdom Ultimate

Planète Glutko

Tashiroworld

Tous nos partenaires

Devenir
partenaire



forums

Index du forum > Entraide > [RESOLU] [RM2003] Inventaire custom sans trou


Sahone - posté le 20/05/2013 à 00:01:35 (2081 messages postés)

❤ 0

Maker / Smasher

Domaine concerné: prog. en event
Logiciel utilisé: RM2003
Salut, les gens !
J'aimerais savoir faire un Menu d'Objets "sans trous" et je n'y arrive pas. :quoi?
Comment faire pour quand j'ajoute un objet, il se place en dessous des autres ?
Comment faire, par exemple, si j'utilise l'objet 1 et qu'il y en ai plus, que l'objet 2 prennent sa place ?
Ce genre de menu est présent dans la dernière version d'Aëdemphia, j'ai vu.

Il y a peut-être des tutos dans le genre mais je n'en ai pas trouvé ou peut être que vous avez un screen d'une programmation de ce style.

Si quelqu'un pourrait trouver la solution à mon problème. :sourire2
Je le remercis d'avance ! :)

Venez visiter ma Galerie | Ma Chaine Youtube


Joke - posté le 20/05/2013 à 00:38:51 (5090 messages postés)

❤ 0

Bilouteux fou

Je sais déjà ce que certains vont dire. Gardez votre blague !

Tout dépend la manière dont tu affiche tes objets, si c'est en picture ou directement avec l'apparence des événements.

Faire un menu objet, ça peut être difficile... comme très très difficile, tout dépend de ce que tu veux afficher réellement... d'où tu en es actuellement, etc. Précise bien ce que tu veux et on peut te donner des clés.

Sous RM2003 il y a l'avantage d'avoir la commande "appeler événement : tel événement de la carte, telle page", qui est très pratique pour manipuler les objets sous forme d'événements. Il faut bien savoir utiliser les variables.

Fais un screen de ton menu tel que tu le voudrais, ou tel que tu l'as commencé, on verra ensuite.

biloumaster.fr, mon joli site ouèb tout bô tout frai !


Sahone - posté le 20/05/2013 à 00:45:28 (2081 messages postés)

❤ 0

Maker / Smasher

Ce que je veux faire est un menu d'objet en picture, que voici accessoirement :
image

Tout est déjà programmé, sauf la reconnaissance des objets, des cases vides ou non (si tu préfères ^^). Bref les questions que je t'ai posé au dessus, je n'arrive pas à trouver la méthode.

Je sais bien utiliser les variables ne t'inquiète pas pour ça.

Venez visiter ma Galerie | Ma Chaine Youtube


Joke - posté le 20/05/2013 à 02:00:48 (5090 messages postés)

❤ 0

Bilouteux fou

Je vois, tu as une grille de 14*2 soit 28 objets affichés simultanément.

Tu peux calculer la position de l'image en fonction d'une variable "Position", qui serait la position de l'objet dans le menu, à savoir, positon = 0 ça serait la position de l'objet tout en haut à gauche.

Tes cases font 71*13px, et les deux colonnes sont espacées de 4px

Si l'image d'un objet est affiché par une picture faisant 71*13px (la taille d'une case), j'en déduis que l'image du premier objet en haut à gauche doit être placé à X=37, Y=32

Pour déplacer l'image sur la colonne de droite, il faut additionner 75 (71+4) en X
Pour déplacer l'image sur la ligne du dessous, il faut additionner 13 en Y

L'objectif c'est de savoir si l'image est sur la colonne de droite ou de gauche, et sur telle ou telle ligne, directement à partir d'une variable "position"

Objet en haut à gauche : Position = 0, Ligne = 0, Colonne = 0
Objet en bas à gauche : Position = 13, Ligne = 13, Colonne = 0
Objet en haut à droite : Position = 14, Ligne = 0, Colonne = 1
Objet en bas à droite : Position = 27, Ligne = 13, Colonne = 1

Un objet de position "Position" s'afficherait aux coordonnées :

"X" = "Colonne"*75 + 37
"Y" = "Ligne"*13 + 32

Il y a juste besoin de créer les variables X, Y et Position, puisque "Colonne" et "Ligne" peut être calculé simplement depuis la variable "Position"

Le calcul est simple, pour avoir "Colonne" et "Ligne" exprimées en fonction de "Position" :

"Colonne" = "Position" divisé par 14
"Ligne" = "Position" modulo 14

On a donc, en exprimant "X" et "Y" en fonction de "Position" uniquement, et non plus "Colonne" et "Ligne" :

"X" = "Position" / 14 * 75 + 37
"Y" = "Position" modulo 14 * 13 + 32

Ce qui revient à faire :

<> modifier variable "X" = "Position"
<> modifier variable "X" diviser par 14
<> modifier variable "X" multiplier par 75
<> modifier variable "X" additionner 37
<> modifier variable "Y" = "Position"
<> modifier variable "Y" modulo 14
<> modifier variable "Y" multiplier par 13
<> modifier variable "Y" additionner 32
<> afficher image "Objet machin" aux coordonnées "X", "Y"


Ce calcul est valable pour la position du curseur. Comme ce calcul va être utilisé plein de fois, je te conseille de faire :
- Soit un événement commun en mode appel avec juste le calcul de "X" et "Y" dedans
- Plus joli : Dans l'événement principal de ton menu, qui gère d'abord l'affichage du menu, puis ensuite la sélection de l'objet, tu créé une première page en mode "appui touche" avec simplement le calcul de X et Y dedans. Tu pourras appeler cette page exactement comme tu appelle un événement commun, avec la commande "appeler événement", sauf que tu choisis "Evénément de la carte.... L'événement en question, page 1"

Donc voilà, juste avec ça, tu sais afficher l'image de l'objet que tu veux directement à partir de la variable "Position", et après avoir utilisé la variable "Position" pour afficher toute tes images, tu peux réutiliser cette même variable pour afficher le curseur, et du coup "Position" serait la position du curseur dans la grille.

Maintenant il faut afficher tous tes objets... Et ça sera très simple grâce à "Appeler événement : L'événement où t'as mis le calcul de X et Y, page 1"

Le problème à prendre en compte, avant d'afficher tous les objets, c'est de dire en même temps à quelle position se trouve tel ou tel objet, de sorte à savoir sur quel objet est positionné le curseur, quand le curseur est à la position "Position".
Ça te permettra d'afficher en fonction le nombre de fois que l'on a l'objet en question (Dans la partie "Nombre d'objet" que tu as déjà fait), et programmer son effet lorsqu'on l'utilise.

Comme ta grille contient 28 objets, il te faut 28 variables... Tu peux par exemple prendre les variables 101 à 128, il faut qu'elles se suivent. Chacune de ces variables correspondent à l'ID de l'objet stocké dans l'emplacement correspondant. La variable 101 correspond au premier emplacement, elle sera donc égale à l'ID de l'objet en "Position = 0" si en position 0 tu as le troisième objet de ta BDD... ben la variable 101 sera égale à 3.

Maintenant, mettons que l'objet d'ID 22 est placé à "Position = 13"... Il faut rendre égal à 22 la variable d'ID combien... ? La variable d'ID "101+13" !

Si on considère que l'objet d'ID définie par la variable "ID Objet" est placé à la position définie par la variable "Position", il faut faire le code suivant pour enregistrer l'ID de ton objet dans la variable correspondante à sa position :

<> modifier variable "A" = "Position"
<> modifier variable "A" additionner 101
//ID de la première variable de ton groupe de variables
<> modifier variable "dont l'ID est stocké dans la variable "A"" = "ID objet"


Avec ces trois lignes, on renseigne directement l'ID de l'objet dans la variable correspondant à l'emplacement où se trouve l'objet... La position "Position".

C'est aussi un calcul que tu vas faire souvent... Alors je te conseille encore de le faire rapidement avec la commande "Appel événement"

Tu prends ton événement principal qui affichera la liste, il y a déjà la première page avec le calcul de X, Y en fonction de Position... Ben tu créé une deuxième page, également en "appui touche", qui entre l'ID de l'objet dans la variable de l'emplacement correspondant à la variable "Position".

Dans ce même événement, tu peux enfin commencer le code d'affichage de ta liste d'objet : Il te suffit de créer une troisième page, en processus parallèle, et de faire ce qui suit :

<> modifier variable "Plusieurs : d'ID 101 à 128" = 0
<> modifier variable "Position" = 0
<> modifier variable "ID Objet" = 1
//ID du premier objet à afficher... s'il est possédé
<> condition : Si "Objet
1" est possédé
- - <> appeler événement "cet événement", page 1
//Calcul de X, Y
- - <> appeler événement "cet événement", page 2
//Référencement de l'objet
- - <> afficher image "
1 : Objet1", "X", "Y"
- - <> modifier variable "Position" additionner 1
Fin de condition
<> modifier variable "ID Objet" additionner 1
<> condition : Si "Objet
2" est possédé
- - <> appeler événement "cet événement", page 1
- - <> appeler événement "cet événement", page 2
- - <> afficher image "
2 : Objet2", "X", "Y"
- - <> modifier variable "Position" additionner 1
Fin de condition
<> modifier variable "ID Objet" additionner 1
<> condition : Si "Objet
..." est possédé
- - <> appeler événement "cet événement", page 1
- - <> appeler événement "cet événement", page 2
- - <> afficher image "
... : Objet...", "X", "Y"
- - <> modifier variable "Position" additionner 1
Fin de condition
ETCÉTÉRA, avec CTRL+C, CTRL+V + éditer !


Il suffit de copier coller le "ID Objet additionner 1" et la condition suivante autant de fois qu'il y a d'objet dans le jeu, et comme tout est fait proprement, il n'y a que le jaune à modifier.

Une fois que tu as fait ça... Ben tes objet sont bien affichés les uns après les autres, sans trous. Il reste maintenant à programmer ton curseur, et la sélection d'objet.

Tu réutilise simplement :
- La variable "Position" pour la position du curseur
- "Appeler événement "cet événement", page 1" pour afficher l'image du curseur aux positions "X", "Y"

Pour programmer le déplacement du curseur, tu peux faire :

<> si on appuie sur la touche "haut" : <> modifier variable "Position" soustraire 1
<> si on appuie sur la touche "bas" : <> modifier variable "Position" additionner 1
<> si on appuie sur la touche "gauche" : <> modifier variable "Position" soustraire 14
<> si on appuie sur la touche "droite" : <> modifier variable "Position" additionner 14
<> modifier variable "Position" modulo 28


J'ai eu la flemme de détailler "demander l'appui d'une touche, stocker dans la variable..." tu m'as bien compris, l'important c'est le raisonnement.

La dernière ligne, avec le modulo, comme tous les modulos précédents, ça sert à reboucler ton tableau, horizontalement et verticalement. En gros, ça fait en sorte de ramener la position du curseur entre 0 et 27. Si tu es à la position 14 par exemple, tout en haut à droite de ton tableau, et que tu appuie sur "droite", tu seras à la position 28... ors, 28 modulo 28 = 0, ça te fait donc simplement basculer à la colonne de gauche.

En d'autres termes, la simple utilisation d'un "modulo 28" (28 étant le nombre de cases du tableau) ça tévite de faire des conditions chiantes du style "Si "Position" > 27 => "Position" = 0", là tu t'en débarrasse bien gentiment ! Cette technique est la même pour un menu avec par exemple 9 actions différentes, où on défilerait le curseur de haut en bas... Ben il suffit que la première position soit 0, et on fait un "modulo 9" pour que lorsqu'on atteint le bas, on revient en haut, et inversement. C'est pour ça qu'il est plus intelligent de dire que la première position, c'est 0, et non 1, car on utilise plus rapidement le modulo avec la valeur du nombre total d'entrées dans le tableau... sans se casser la tête !

Une dernière chose à faire, c'est de bien savoir manipuler tes variables, pour pouvoir exploiter ton groupe de 28 variables. Par exemple, si ton curseur est à la position "Position", il faut connaître sur quel objet il est tombé... Ben l'ID de l'objet en question est stocké dans la variable d'ID 101+Position ! Tu peux donc faire :

<> modifier variable "A" = Position
<> modifier variable "A" additionner 101
<> modifier variable "A" = Valeur de la variable "d'après la variable "A""


Et avec ces trois lignes, tu as dans la variable "A", l'ID de l'objet se trouvant à la position "Position" ! Selon comment tu gères tes objets, avec la véritable BDD ou avec un autre groupe de variable... C'est à toi d'exploiter la valeur de cette variable "A" pour "utiliser l'objet d'ID "A"" ou stocker "Le nombre d'objet d'ID "A" que l'on possède"

Si tu veux faire plusieurs pages, ou faire défiler les objets verticalement ou horizontalement (Préférer horizontalement dans la configuration actuelle), il faut étendre ton groupe de variables stockant la position des objets au nombre d'objet total... et bien réviser tes modulos et tout ce que j'ai déjà expliqué car ça fait déjà du boulot !



ULTRA EDIT

J'ai pensé toute mon explication pour un tableau qui se remplit normalement, c'est à dire, d'abord la colonne de gauche, puis la colonne de droite... Si tu veux faire l'inverse, que les objets soient placés sur les deux colonnes, se remplissant du haut vers le bas sur les deux colonnes, comme ça :

Position = 0 >>> Colonne 0, Ligne 0
Position = 1 >>> Colonne 1, Ligne 0
Position = 2 >>> Colonne 0, Ligne 1
Position = 3 >>> Colonne 1, Ligne 1
Position = 4 >>> Colonne 0, Ligne 2
Position = 5 >>> Colonne 1, Ligne 2
Position = 6 >>> Colonne 0, Ligne 3
Etc. Ce qui est quand même mieux, esthétiquement et ergonomiquement parlant !

Pas de panique ! Dans tout ce que j'ai dis, il suffit simplement de faire des "modulo 2" "diviser par 2" au lieu des "modulo 14" "diviser par 14"... Le "modulo 28" reste un "modulo 28"

Il y a aussi les déplacements du curseur qui changent :

<> si on appuie sur la touche "haut" : <> modifier variable "Position" soustraire 2
<> si on appuie sur la touche "bas" : <> modifier variable "Position" additionner 2
<> si on appuie sur la touche "gauche" : <> modifier variable "Position" soustraire 1
<> si on appuie sur la touche "droite" : <> modifier variable "Position" additionner 1
<> modifier variable "Position" modulo 28


biloumaster.fr, mon joli site ouèb tout bô tout frai !


Sahone - posté le 20/05/2013 à 12:30:53 (2081 messages postés)

❤ 0

Maker / Smasher

Merci beaucoup pour ce long tutoriel Joke ! C'est vraiment sympa ! Tu devrais le proposer dans la section tutoriel du site.
Maintenant, il ne me reste plus qu'à comprendre et à tester ton tuto.
Et encore merci !

EDIT : Merci, Joke t'es génial !!! J'ai réussit et j'ai bien compris tes explications. C'est vraiment sympa ! J'ai level-up en programmation event là !
Un petit screen : image

Venez visiter ma Galerie | Ma Chaine Youtube


Joke - posté le 24/05/2013 à 19:58:28 (5090 messages postés)

❤ 0

Bilouteux fou

Eh bien tu m'en vois bien ravis de l'apprendre ! =) Si tu n'avais pas déjà avancé seul ton CMS je pense que tu aurais été largué ! ^^

Au lieu de Vigaura j'ai lu Viagra... Ma foi, ça doit avoir le même effet !

biloumaster.fr, mon joli site ouèb tout bô tout frai !


AlterEgo - posté le 24/05/2013 à 20:11:59 (2481 messages postés)

❤ 0

It shall be engraved upon your soul

J'ai peut etre saute une ligne donc je sais pas si Joke en a parle, mais tu devrais prevoir un evenement commun d'update, pour mettre a jour la lliste des objets et les reorganiser si le joueur en utilise directement depuis le menu. Je dis ca surtout parce que tu as des potions dans la premiere case, et donc avec un evenement commun pour updater la liste, ca permettrai de decaler tous les objets d'une case en arriere pour ne pas laisser d'espaces vides au milieu si le joueur consomme tous les objets d'un meme type.
Ou bien tu peux laisser ce choix au joueur via une touche qui appellerait cet evenement commun.

C'est surtout pratique d'en faire un independant du reste du systeme pour optimiser la vitesse d'affichage, vu que du coup tu ne selectionnes que ce qui est relatif a l'update de la liste d'objets.

Je sais pas si je suis clair.

Et le pharaon noir est le premier roi de l’Atlantide pour la gloire de rien comprendre


arttroy - posté le 24/05/2013 à 20:21:15 (2394 messages postés)

❤ 0

Just working

Ben pas hyper clair effectivement mais je comprend l'idée et c'est tout simplement bien pensé, j'utilise plus tellement les events mais même avant je n'aurais pas pensé à faire comme ça. Mais comment tu t'y prendrais exactement ? Je ne saisi pas trop l'idée de l'event commun pour updater...

Sinon un tuto de Joke toujours aussi hallucinant que ses précédents... J'ai juste bloqué sur la longueur du post (et après sur le contenu...). Merci de partager tes connaissances avec nous.

PS : Moi aussi j'ai lu viagra...

Anti-inconstructivité / Pétition pour que le mot making soit inscrit dans le dictionnaire ?


Sahone - posté le 24/05/2013 à 21:01:49 (2081 messages postés)

❤ 0

Maker / Smasher

@AlterEgo
Je vois se que tu veux dire et c'est ce que j'ai fait. Si j'utilise l'objet et qu'il y en a plus, la liste se réorganise automatiquement et j'ai bien évidemment mis cette programmation dans un event commun.

Citation:

Au lieu de Vigaura j'ai lu Viagra... Ma foi, ça doit avoir le même effet !



:lol
Enfait c'est une potion qui regénère de la vigueur. ^^'

Venez visiter ma Galerie | Ma Chaine Youtube


Anton_ - posté le 24/05/2013 à 21:48:29 (1535 messages postés)

❤ 0

Ma foi, Joke, encore une magnifique démonstration de la belle prog de RM2003 :ange2
Je pourrais même m'en servir pour le prochain projet de maelstorm.

Raetribution | Megamike || tutos : 1 2 || Une bonne dose de maths pour la route


Joke - posté le 24/05/2013 à 22:34:54 (5090 messages postés)

❤ 0

Bilouteux fou

Sahone a dit:


@AlterEgo
Je vois se que tu veux dire et c'est ce que j'ai fait. Si j'utilise l'objet et qu'il y en a plus, la liste se réorganise automatiquement et j'ai bien évidemment mis cette programmation dans un event commun.

Tu pouvais aussi reprendre la logique de "appeler événement "cet événement, page...", car l'affichage de ta liste tu le fais déjà au tout début, si tu veux répéter ce code après chaque utilisation d'objet, tu isole le code dans une page à part, et tu appelle cette page quand tu veux, à l'affichage initial du menu comme pour le rafraichissement après utilisation d'un objet. ^^

Ensuite, je t'ai laissé faire plusieurs choses sans les expliquer (et je suis ravi que tu te sois démerdé) j'espère juste que ça ne laggera pas !

Sinon... Vigaura... Vigori... Vigoria... Vigaurine... Vigorianne... y'a du choix !

biloumaster.fr, mon joli site ouèb tout bô tout frai !


Sahone - posté le 24/05/2013 à 22:49:31 (2081 messages postés)

❤ 0

Maker / Smasher

J'ai testé et ça ne lag pas mais merci du conseil. ^^

Je pense remplacer Vigaura par Vigaurine.

Venez visiter ma Galerie | Ma Chaine Youtube


trucbiduleII - posté le 24/05/2013 à 23:06:44 (815 messages postés)

❤ 0

De toutes façons, peu importe le nom de l'item qui redonne de la vigueur, il sera forcément assimilé à du Viagra. Encore plus s'il a des sonorités communes.

Mon deviantArt || Ma chaîne Youtube


Joke - posté le 25/05/2013 à 11:18:58 (5090 messages postés)

❤ 0

Bilouteux fou

Mais si tu mets vraiment un item "Viagra" pour restaurer la vigueur... Ben c'est génial... j'aime !

biloumaster.fr, mon joli site ouèb tout bô tout frai !

Index du forum > Entraide > [RESOLU] [RM2003] Inventaire custom sans trou

repondre up

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe - Mentions légales

Plan du site

Communauté: Accueil | Forum | Chat | Commentaires | News | Flash-news | Screen de la semaine | Sorties | Tests | Gaming-Live | Interviews | Galerie | OST | Blogs | Recherche
Apprendre: Visite guidée | RPG Maker 95 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker MV | Tutoriels | Guides | Making-of
Télécharger: Programmes | Scripts/Plugins | Ressources graphiques / sonores | Packs de ressources | Midis | Eléments séparés | Sprites
Jeux: Au hasard | Notre sélection | Sélection des membres | Tous les jeux | Jeux complets | Le cimetière | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Proposer
Ressources RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
Ressources RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
Ressources RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
Ressources RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis
Archives: Palmarès | L'Annuaire | Livre d'or | Le Wiki | Divers