Bonjour,

J'avance doucement sur mon petit jeu et j'en suis à la collision entre le héro, les méchants, les missiles du héro et les missiles des méchants.

Mais j'ai un petit problème avec la détection des collisions. J'ai fait une interface (IAndroid) pour les robots (héro et méchants) et une pour les missiles.

Voici ma gameloop
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
GetMouseInput(); // Récupère les cliques de la souris
GetKeyboardInput(); // Récupère les flèches appuyées du clavier pour le déplacement
 
foreach (Mechant grr in Mechants)
{
    if (DetectCollision(Hero, grr))
    {
        this.Title = "TOUCHE";
    }
    else
        this.Title = "";
 
    grr.Update(this, Hero); // Déplacement et rotation du méchant
}
 
Hero.Update(gameSurface, PressedKeys); // Déplacement et rotation du héro
Pour le moment, les méchants ne se déplacent pas, ils ne font que suivre le héro du regard.

Dans mon interface IAndroid, j'ai déclaré
Code : Sélectionner tout - Visualiser dans une fenêtre à part
Rect CollisionZone { get; }
et dans les classes j'ai ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
public Rect CollisionZone
{
    get
    {
        return new Rect(Canvas.GetLeft(this), Canvas.GetTop(this), 20, 20); ;
    }
}
Comme ça, j'ai dans ma List<Mechant> Mechants la possibilité d'accéder à la position de la zone de collision. \o/

Maintenant, voici ma fonction de détection des collisions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
public bool DetectCollision(IAndroid controlOne, IAndroid controlTwo)
{
    Rect rectCol = controlOne.CollisionZone;
    rectCol.Intersect(controlTwo.CollisionZone);
    return !(rectCol == Rect.Empty);
}
Avec ça, j'arrive à savoir si mon Héro est sur un méchant mais ce que je voudrais faire c'est qu'il ne puisse pas les toucher. Comme si c'était un mur.

Je me suis dit, je vais créer une fonction CancelMove et si DetectCollision retourne true, J'annule mon mouvement mais j'ai pas du faire comme il le fallait car le rendu est super crade. Quand je m'approche d'un obstable, le héro tremble, passe au travers, ne bouge plus du tout....

J'ai vu des tuto sur la collision mais ils font tous la même chose. (Détection puis boom explosion de l'élément). Moi, je voudrais plutôt un truc du genre "non tu peux pas aller là".

Surtout que je dois l'appliquer ensuite aux méchants entre eux.

Si quelqu'un a une idée, je suis preneur.

Merci d'avance