2017-10-13 1 views
2

Ich arbeite an einem Spiel, wo, wenn zwei Objekte (in Form von zwei Bildkästen) kollidieren, der Benutzer ein Leben verliert. Ich bin mir jedoch nicht sicher, wie ich eine if-else- oder switch-case-Anweisung verwenden würde, um festzustellen, wann sie kollidiert sind. Ich habe versucht, dies zu verwenden, aber es scheint nicht viel, also wenn die Position einer Bilderbox genau der anderen entspricht, würde es etwas tun. Dies diente nur als Praxis für diesen Teil eine bedingte Anweisung, damit es nicht viel zu tun hat:Wie man herausfindet, wenn zwei Bildkästen in C kollidieren WinForms

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

Blick in Algorithmen, die 2d Kollision erkennen. Hier ist ein guter Ort, um zu beginnen https://developer.mozilla.org/en-US/docs/Games/Techniques/2D_collision_detection –

+0

@SamMarion danke für den Link, ich werde es untersuchen. –

+0

Der Grund, warum Ihr Code nicht funktioniert, ist, dass der Ort ein bestimmter Punkt für die PictureBox ist (ganz oben links). Die einzige Möglichkeit, die jemals wahr wäre, ist, wenn die oberen linken Ecken jeder Bildbox an demselben Punkt sind (und auch nur, wenn sie auf das gleiche Punktobjekt verweisen, wie ich glaube, da Sie == anstelle von .Equals verwenden) –

Antwort

5

erstellen Rectangle s und prüfen, ob Kreuzungen:

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

Vielen Dank, das ist wirklich hilfreich! Ich werde mit diesen Kommentaren spielen und hoffentlich ein gutes Ergebnis sehen –

Verwandte Themen