XNA - Collisions 2D, comment les gérer ?

Utilisateur anonyme - 8 déc. 2012 à 16:06
madkeyboard Messages postés 100 Date d'inscription mercredi 27 avril 2011 Statut Membre Dernière intervention 21 décembre 2012 - 18 déc. 2012 à 11:45
Bonjour,
Je vous contacte car dans mon jeu en cours de développement, j'ai un joueur avec plusieurs zombies qui veulent le tuer en le poursuivant.
Voici le code de déplacement des zombies :

    this.Direction = player_position - Position;
            if (Direction != Vector2.Zero)
                Direction.Normalize();
            this.Position += this.Direction * this.speed;


Mais au bout d'un moment, les zombies se superposent les uns sur les autres :



Comment puis-je y remédier, pour que les zombies entourent (si ils sont nombreux) le joueur sans se superposer ?

J'espère avoir été précis,
Merci d'avance,
Sorpia.

---------------------------------------------------
Je vous regarde !

2 réponses

Utilisateur anonyme
8 déc. 2012 à 18:25
Je sais déjà comment faire la collision entre cercle :

public Boolean IsCollidingCercle(int _x1, int _y1, int _x2, int _y2, int _radius1, int _radius2)
        {
            int x1 = _x1 + 5;
            int y1 = _y1 + 5;
            int x2 = _x2;
            int y2 = _y2;
            int radius1 = _radius1;
            int radius2 = _radius2;

            //compare the distance to combined radii
            if (Math.Sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) < (radius1 + radius2))
            {
                return true;
            }
            return false;
        }



---------------------------------------------------
Je vous regarde !
0
madkeyboard Messages postés 100 Date d'inscription mercredi 27 avril 2011 Statut Membre Dernière intervention 21 décembre 2012 1
18 déc. 2012 à 11:45
Salut,
Je suppose que la position de tes zombies sont le centre des cercles ?
Du coup, ta méthode pour les faire est en effet un peu limité !

Il faut intégrer ta méthode de test de collision dans les déplacement, ainsi que les vecteurs de directions de chacun de tes zombis...
Mais c'est un peu plus compliqué que ça, il faut qu'ils changent de direction avant la collision, donc dans ton test de collision, il faudrait plutôt tester s'il va y avoir une collision avec chacun des autres zombies (ou autres obstacles) en analysant la direction de chacun.

Ensuite, si c'est le cas, tu dois modifier la direction de déplacement de chacun des zombies concerné par la future collision en rectifiant le direction pour qu'ils ne se touchent pas, tout en continuant à viser le joueur...
Après il y a plein de manières différentes de les faire réagir, à toi de définir comment tu veux précisément qu'ils se comportent, les solutions paraîtrons assez limpides je pense.

C'est tout de même un peu plus compliqué qu'un pong ^^

Mad Keyboard
0
Rejoignez-nous