Bonjour à tous
Je reviens vers vous au sujet de mon inventaire, car oui, je suis toujours entrain de bosser dessus ! plus c long, plus c bon, n’est ce pas ? ^^
Je vais tâcher de vous expliquer mon nouveau problème clairement ça fait 2 jours que je bloque dessus…
La scène d’inventaire se présente en 2 parties :
- A droite, un shop dans lequel on peut acheter des Items : ils sont générés aléatoirement, il y a donc une quantité presque infinie d’items différents.
- A gauche, l’inventaire du joueur
L’inventaire se compose de 180 “cases” (12 cases en largeur x 15 de hauteur) de 30x30pixels chacune.
Partons du principe (pour simplifier) que tous les objets de l’inventaire ont une dimension de 30x30 pixels.
Les objets sont déplacés dans l’inventaire grâce au comportement “objets déplaçables” (qui entre nous soit dit est extra)
Lorsque que l’on clic sur un objet à déplacer, je créer un carré de 30x30 pixels (nous l’appellerons le “carré de sélection”). Ce “carré de sélection” va suivre l’objet déplacé en se déplaçant, non pas de manière continue, mais case par case (de 30pixels à chaque fois) suivant la formule suivante :
"round(DessinItemsShop.PointX(deplac)/30)*30 " pour les X
"round(DessinItemsShop.PointY(deplac)/30)*30 " pour les Y
=> “DessinItemShop” est le groupe regroupant tous les objets de l’inventaire possibles, et donc l’objet qui est entrain d’être déplacé.
Lorsque le clic est relâché, l’objet vient se mettre à la même position que le “carré de sélection”, ce qui permet de simuler des cases de rangement dans l’inventaire.
Jusque là, tout va bien
Ensuite arrive donc la question de la superposition des objets dans l’inventaire, et c’est là que ça se corse pour moi
Il y a 2 cas de figures :
1/ Lorsqu’un objet arrive dans l’inventaire pour la première fois, il ne faut pas qu’il vienne par dessus un objet déjà présent.
=> pour ce point, j’ai trouvé une solution et ne vais pas vous embêter avec ça.
2/ lorsque l’on déplace un objet à l’intérieur même de l’inventaire, si je relâche le clic lorsqu’il est sur un objet déjà présent, je ne veux pas qu’il se superposent. Et c’est là que je bloque.
A noter que chaque objet présent dans l’inventaire a des “variables objets” associées (pour chaque occurrence) telle que :
- Position X réelle de l’objet dans l’inventaire (une fois posé) PosX
- Position Y réelle de l’objet dans l’inventaire (une fois posé) PosY
- Une variable (0 ou 1) lorsque l’objet est en mouvement
- Le numéro de l’objet (car chaque objet est unique)
Je ne pensais pas que ce point serait une difficulté.
J’avais imaginé faire ceci (juste pour vous expliquer la logique) :
-
Si l’objet du groupe “DessinItemShop” est entrain d’être déplacé,
ALORS : la variable “Mouvement” = 1 -
Si la variable “Mouvement”=1
et l’objet du groupe “DessinItemShop” n’est pas entrain d’être déplacé
et “DessinItemShop” est en colision avec “DessinItemShop”
ALORS, supprimer l’objet “carré de sélection”
et déplacer objet du groupe “DessinItemShop” à la position PosX,PosY (où PosX et PosY sont les variables d’objets dont j’ai parlé plus haut).
Il s’avère que ça ne fonctionne absolument pas… (ce qui est normal en fait)
J’ai ensuite essayé pleins d’autre idées, mais rien ne fonctionne…
C’est pourquoi je pense que j’aborde le problème sous un mauvais angle, et c’est pourquoi je me permet de poster
Je n’attends pas de solution toute faite, mais des idées de solutions si possible ^^
Un grand merci à tous !
A++
Ludo