2017-10-13 5 views
2

Je travaille sur un jeu où, si deux objets (sous la forme de deux boîtes d'images) entrent en collision, l'utilisateur perd une vie. Cependant, je ne suis pas sûr de la façon dont j'utiliserais un if-else ou un changement d'instruction pour déterminer quand ils sont entrés en collision. J'ai essayé d'utiliser ça mais ça ne semble pas beaucoup, donc quand l'emplacement d'une image est exact à l'autre, ça ferait quelque chose. Cela ne servait que la pratique en utilisant une instruction conditionnelle pour cette partie donc il n'a pas fait grand-chose:Comment savoir quand deux boîtes d'images sont entrés en collision dans C# WinForms

if(pictureBox1.Location == pictureBox2.Location) 
      { 
       pictureBox1.Location = new Point(pictureBox1.Left - 10); 
      } 
+1

Regardez dans les algorithmes qui détectent la collision 2d. Heres un bon endroit pour commencer https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection –

+0

@SamMarion merci pour le lien, je vais regarder dans le. –

+0

La raison pour laquelle votre code ne fonctionne pas est que Location est un point spécifique pour le PictureBox (tout en haut à gauche). La seule façon de procéder serait si les coins en haut à gauche de chaque image étaient au même point (et seulement s'ils référencent le même objet Point que je crois puisque vous utilisez == au lieu de .Equals) –

Répondre

5

Créer Rectangle s et vérifier les intersections:

var rect1 = new System.Drawing.Rectangle(pictureBox1.Location, pictureBox1.Size); 
var rect2 = new System.Drawing.Rectangle(pictureBox2.Location, pictureBox2.Size); 

if (rect1.IntersectsWith(rect2)) 
{ 
    // Here is your collision. 
} 
+0

Merci beaucoup, c'est vraiment utile! Je vais jouer avec ces commentaires et voir avec optimisme un bon résultat –