collision entre instances d'un même objet

Bonsoir,
J’ai un objet “Héro” entouré de “capteursHéro” (mini objets placés autour du “héro” pour détecter si le “Héro” aura le droit de se déplacer à droite, à gauche, en haut, en bas. Lorsque les capteurs entrent en collision avec d’autres objets je mets à jour des variables (“Bas”, “Haut”, “Droite”, “Gauche”) de l’objet “Héro”.

J’ai plusieurs instances d’objet “Garde” également entourés de “capteursGarde” pour la même raison. Les collision de ces capteurs entrainent également la mise à jour des variables “Bas”, Haut", “Droite”, “Gauche” des instances d’objet “Garde”.

Tout marche parfaitement lorsque le Héro ou les Gardes rencontrent d’autres objets (leurs variables sont correctement initialisées)

Mais comment faire lorsqu’un Garde rencontre un autre Garde? Prenons l’exemple d’un garde (ID=1) qui se trouve au dessus d’un autre garde (ID=2)
Comment faire en sorte d’initialiser correctement les variables “Bas” de chacun de ces gardes?
La variable “Bas” du garde au dessus (ID=1) devra être mise à jour et être égale à “Garde”
La variable “Bas” du garde au dessous (ID=2) devra être inchangée, toujours égale à “Vide”

J’ai essayé quelque chose du style:

/* initialisation des variables “Bas” */
Pour chaque objet Garde, répéter:
Faire “Vide” au texte de la variable “Bas” de Garde

/* teste de collision et mise à jour éventuelle des variables “Bas” /
Pour chaque objet Garde, répéter:
Pour chaque objet CapteurBasGarde /
(je me débrouille pour sélectionner le bon “CapteurBasGarde” de chaque garde avec un ID du capteur qui correspond à l’ID du garde…pas de problème… MAIS maintenant il me faut tester l’éventuelle collision de CE “CapteurBasGarde” avec un autre garde) */
Pour chaque objet Garde, répéter:
L’objet CapteurBasGarde est en collision avec Garde, Faire “Garde” au texte de la variable “Bas” de Garde

La variable “Bas” du Garde du dessus n’est jamais mise à jour… Est-ce que mon problème vient du fait que j’ai deux boucles imbriquées “Pour chaque objet Garde, répéter”?

Gasp! Je ne suis pas certain d’être très clair dans mon explication :confused: :slight_smile:

Est-ce que quelqu’un aurait un petit conseil à donner dans un cas (tordu… je l’avoue…) comme le mien?

Cordialement,
Damien.

Pas vraiment, c’est le vrai problème de GD: Différencier 2Objets identiques…
Collision entre Objet et Objet tu peux pas les différencier :frowning:
Donc dès que t’as une collision c’est cause perdue :wink: (Avec les mêmes objets :wink: )

Tu peux créer un objet sprite Garde1 et un objet sprite Garde2.
Même apparence, mais objets différents pour GD.

Tu es sûr que tu as besoin d’un système aussi compliqué ?
C’est quoi la possibilité offerte par les capteurs, exactement ?

EDIT :

je suppose que c’est pour émuler les droits de passage à la RPG maker, où on peut définir le sens de passage sur un pont ou une corniche.

Moi, je te proposerais de travailler avec deux graphismes :

  • Les graphismes visibles, avec les jolis sprites et les jolies couleurs
  • Les graphismes de collision, en opacite zéro, qui déterminent où les autres sprites peuvent ou ne peuvent pas aller.

Tu peux même les mettre sur deux calques différents, pour les désactiver à la volée selon les besoins.
Mais il faudra que ces deux calques suivent la même caméra de la même manière …

Merci beaucoup pour vos réponses.

En fait c’est assez simple… Le “Héro” (qui se déplace grâce à l’appui des flèches “Haut”, “Bas”, “Droite”, “Gauche” du clavier) est poursuivi par x “Gardes” qui, eux, se déplacent automatiquement.

Les “capteurs” sont des sprites invisibles qui entourent et se déplacent en même temps que le “Héro” ou les “Gardes”. Quand un capteur heurte un autre objet (ex: mur, eau, etc), je rends impossible la progression du “Héro” ou des “Gardes” dans cette direction donnée.

En fait, tout marche très bien. Les “Gardes” se dirigent vers le “Héro” de manière simple en prenant en compte la position X,Y de celui ci.

Mais cet algorithme très simple de déplacement des “Gardes” fait que, très vite au cours du jeu, les gardes se superposent. Je voulais empécher cette superposition en testant si un capteur autour d’un garde était en contact avec un autre garde (dans ce cas j’aurais également rendu impossible la progression d’un garde, empêchant la superposition)

Mais bon, pour cela j’ai besoin de connaitre quelles sont les instances de garde qui sont entrées en collision et réagir en conséquence.

Le jeu est entièrement paramétrable (chaque niveau a un nombre quelconque d’objets (ex: murs, gardes) dans chaque scène. Plus le nombre de gardes est élevé et plus il dur de réussir un niveau bien sur…

Si j’introduis des objets différents (“Garde1”, “Garde2”, etc.) le programme va devenir plus compliqué (je vais devoir tester un nombre de
plus en plus important de collisions entre différents objets) et je vais perdre le côté “niveau entièrement paramétrable” qui me plaisait bien.

Cordialement,
Damien.

Et si tu passes par un moteur physique ?
Tant que le sprite ne rencontre pas un mur perpendiculaire à son mouvement, la force que tu lui appliques continuera de le faire “glisser” le long de ce mur.
Ce sera beaucoup plus simple à gérer comme ça, je pense.

+1 mtarzaim, clic droit sur un objet, automatismes, ajouter un automatisme → moteur physique. :wink: