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
Pour le moment, les méchants ne se déplacent pas, ils ne font que suivre le héro du regard.
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
Dans mon interface IAndroid, j'ai déclaré
et dans les classes j'ai ça
Code : Sélectionner tout - Visualiser dans une fenêtre à part Rect CollisionZone { get; }
Comme ça, j'ai dans ma List<Mechant> Mechants la possibilité d'accéder à la position de la zone de collision. \o/
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); ; } }
Maintenant, voici ma fonction de détection des collisions
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.
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); }
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
Partager