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

Partagez | 
 

 Trier les objets d'inventaire?

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Shai-la
Ouvrière en Chef de la Grande Tasse Bleue
Ouvrière en Chef de la Grande Tasse Bleue


Nombre de messages : 5386

Age : 38

Localisation : Montpellier

Date d'inscription : 17/04/2006


MessageSujet: Trier les objets d'inventaire?   Sam 14 Jan 2012 - 20:04

Bonjour tout le monde. Pour mon nouveau projet, j'aimerais que les listes d'inventaires soient triées par catégories: par exemple il y aura un cadre pour les objets de type "nourriture", un autre pour les objets de type "potions", pour les armes, etc. Seulement je ne sais pas trop comment faire.
J'ai eu l'idée de faire plusieurs personnages (invisibles) et de faire une fenêtre d'inventaire par personnage (il y a le perso qui porte la nourriture, le perso qui porte les potions, etc). Et ça marche bien. Le problème c'est au moment de cliquer sur les objets d'inventaire... apparemment ça n'est pas accessible au perso principal (joueur).
Une autre idée?
Merci d'avance sourire

_________________
Mon profil Facebook!
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


Nombre de messages : 2466

Date d'inscription : 01/08/2006


MessageSujet: Re: Trier les objets d'inventaire?   Dim 15 Jan 2012 - 11:38

Salut Shai-la
Shai-la a écrit:
Le problème c'est au moment de cliquer sur les objets d'inventaire... apparemment ça n'est pas accessible au perso principal (joueur).
Une autre idée?
Non, la même clin d\\\\'oeil
En fait il y a une astuce assez simple : tu utilises bien un personnage "fictif" par catégorie d'objet d'inventaire et tu affiches l'inventaire de chacun de ces personnages séparément. Mais tu n'oublies pas d'ajouter tous les objets d'inventaire de tous ces personnages au personnage principal également. Ainsi tu n'auras pas l'erreur comme quoi le personnage joueur ne possède pas l'objet d'inventaire sélectionné clin d\\\\'oeil
Chez moi comme ça ça fonctionne. Tiens-nous au courant !

_________________
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
Shai-la
Ouvrière en Chef de la Grande Tasse Bleue
Ouvrière en Chef de la Grande Tasse Bleue


Nombre de messages : 5386

Age : 38

Localisation : Montpellier

Date d'inscription : 17/04/2006


MessageSujet: Re: Trier les objets d'inventaire?   Mar 17 Jan 2012 - 14:42

Ah, pas bête, je vais essayer, merci sourire

_________________
Mon profil Facebook!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Shai-la
Ouvrière en Chef de la Grande Tasse Bleue
Ouvrière en Chef de la Grande Tasse Bleue


Nombre de messages : 5386

Age : 38

Localisation : Montpellier

Date d'inscription : 17/04/2006


MessageSujet: Re: Trier les objets d'inventaire?   Mar 17 Jan 2012 - 15:35

Mouais, pas évident... je continue à tâtonner!

_________________
Mon profil Facebook!
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


Nombre de messages : 2466

Date d'inscription : 01/08/2006


MessageSujet: Re: Trier les objets d'inventaire?   Mar 17 Jan 2012 - 17:37

Bah, si tu trouves ça un peu compliqué, tu peux toujours te simplifier un peu la vie avec une fonction dédiée.
Tu crées une propriété personnalisée de type int nommée par exemple "TypeInv" qui prendra comme valeur, pour chaque objet d'inventaire, le numéro du personnage fictif correspondant (avec -1 comme valeur par défaut).
Ensuite, tu as simplement à créer une fonction dans le style :
Code:
function AddTypeInventory(this Character*, InventoryItem* objet) {

  int id_char = objet.GetProperty("TypeInv");
  if (id_char > -1) character[id_char].AddInventory(objet);
  this.AddInventory(objet);

}
Tu peux bien sûr faire une fonction dans le même esprit pour définir la propriété InventoryQuantity :
Code:
function TypeInventoryQuantity(this Character*, InventoryItem* objet, int quantite) {

  if ((quantite < 0) || (!this.HasInventory(objet)) return;

  int id_char = objet.GetProperty("TypeInv");
  if ((id_char > -1) && (character[id_char].HasInventory(objet))) character[id_char].InventoryQuantity = quantite;
  this.InventoryQuantity = quantite;

}
Maintenant, si ce qui te chagrine c'est d'utiliser plusieurs fenêtres d'inventaires dans ton GUI qui correspondent à des personnages différents, alors il va falloir passer par un système beaucoup plus compliqué de DynamicSprite/DrawingSurface et Cie (et là y'a de la matière pour un module langue).

EDIT : évidemment ça se corse si tu dois gérer plusieurs personnages qui portent chacun des objets de plusieurs types...
Une solution est de créer autant de personnages fictifs que de types d'objets multipliés par le nombre de personnages porteurs d'objets.
Ensuite, tu joues sur id_char en fonction du personnage auquel tu veux ajouter l'objet. Mettons que tu as deux types d'objets : gros et petits. Tu as le personnage joueur #0 et les personnages fictifs #1 (petits) et #2 (gros) ; ainsi que le personnage joueur #3 et les personnages fictifs #4 (petits) et #5 (gros). Il te suffit donc de remplacer "int id_char = objet.GetProperty("TypeInv"); par "int id_char = objet.GetProperty("TypeInv") + this.ID;. Je conviens toutefois que ce n'est pas très élégant... Je vais chercher une autre solution à ce problème ^^

_________________
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
Kitai
Délégué de la tasse bleue
Délégué de la tasse bleue


Nombre de messages : 2466

Date d'inscription : 01/08/2006


MessageSujet: Re: Trier les objets d'inventaire?   Ven 20 Jan 2012 - 13:26

Bien, comme je le disais :
Kitai a écrit:
Maintenant, si ce qui te chagrine c'est d'utiliser plusieurs fenêtres d'inventaires dans ton GUI qui correspondent à des personnages différents, alors il va falloir passer par un système beaucoup plus compliqué de DynamicSprite/DrawingSurface et Cie (et là y'a de la matière pour un module langue).
Du coup ça m'a suffisamment tracassé l'esprit pour que je le fasse, ce fichu module.
Il est disponible ici.

L'utilisation est la suivante :
Après avoir importé le module, tu verras à la première ligne de TypeInventaire.asc
Code:
#define TYPE_PROPRIETE "Type_Inv"
Cela signifie que TypeInv est le nom de la propriété personnalisée à regarder pour trier tes objets d'inventaires.
En supposant que tu gardes Type_Inv, tu crées donc une propriété personnalisée de type textuelle pour tes objets d'inventaire que tu nommes "Type_Inv". De cette façon, tu peux donner la valeur "habits" à tous tes objets d'inventaire qui sont des vêtemets.

Ensuite, dans le GUI qui va contenir ton inventaire, tu crées un bouton de la dimension voulue pour ton inventaire.
En supposant que le nom de script de ce bouton soit bInventaire, il faut alors mettre dans le script, quelque part avant l'affichage du GUI, la commande suivante :
Code:
bInventaire.AsInv(player, "habits");
Ce faisant, ton bouton deviendra une fenêtre d'inventaire qui affichera uniquement les vêtements que porte le personnage joueur (cf. player).
Par défaut, le GUI est prévu pour défiler verticalement, mais tu peux régler ça en passant un troisième paramètre :
Code:
bInventaire.AsInv(player, "habits", eInvBtn_Horizontal);
// ou bien
bInventaire.AsInv(player, "habits", eInvBtn_Vertical);
Pour que l'utilisateur puisse faire défiler l'inventaire, justement, tu crées des boutons "haut" et "bas" (ou "gauche" et "droite" selon le défilement de ton inventaire) dans lesquels tu mets la commande correspondante parmi les suivantes :
Code:
bInventaire.ScrollUp();
bInventaire.ScrollDown();
bInventaire.ScrollLeft();
bInventaire.ScrollRigth();
Dernières précisions, pour mettre à jour l'inventaire, tu appelles à nouveau la commande AsInv sur le bouton. Donc dans l'idéal, il faudrait que tu appelles cette commande après chaque commande AddInventory.
Enfin, si tu veux récupérer l'objet d'inventaire survolé par la souris, tu peux utiliser la commande GetInvBtnAt(mouse.x, mouse.y) (la commande traditionnelle InventoryItem.GetAtScreen(mouse.x, mouse.y) ne fonctionnera pas avec ces inventaires).

EDIT : AGS a un problème de gestion sur les tableaux dynamiques pour les DynamicSprites. Du coup, j'ai ajouté une fonction InvBtnFree(); qu'il faudra appeler avant toute commande RestartGame(), RestoreGame() ou QuitGame() (c'est-à-dire à chaque fois qu'on "quitte" la partie en cours).

Voilà, je crois que j'ai à peu près fait le tour. Dis-moi si ça te convient et n'hésite pas à me suggérer des améliorations.

_________________
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 !


Dernière édition par Kitai le Sam 21 Jan 2012 - 12:03, édité 1 fois
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


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: Trier les objets d'inventaire?   Ven 20 Jan 2012 - 15:45

Kitai, t'es un champion, ça ne me servira pas maintenant mais chapeau bas. coeur
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://lauvrayarcherie.com
Shai-la
Ouvrière en Chef de la Grande Tasse Bleue
Ouvrière en Chef de la Grande Tasse Bleue


Nombre de messages : 5386

Age : 38

Localisation : Montpellier

Date d'inscription : 17/04/2006


MessageSujet: Re: Trier les objets d'inventaire?   Mer 1 Fév 2012 - 11:35

Je vais tester, merci sourire

_________________
Mon profil Facebook!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Trier les objets d'inventaire?   

Revenir en haut Aller en bas
 
Trier les objets d'inventaire?
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Trier les objets d'inventaire?
» Objets d'inventaire de taille variable.
» les objets d'inventaire s'empilent n'importe comment
» LES OBJETS ET L'INVENTAIRE
» Trier automatiquement la boite à objet ?

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: