Laden...

picturbox Kollision abfangen?

Erstellt von BlauBär vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.401 Views
B
BlauBär Themenstarter:in
23 Beiträge seit 2007
vor 15 Jahren
picturbox Kollision abfangen?

Hi,

ich habe da mal ne Frage.
Also ich habe 2 PictureBoxen die sich auf einer Form bewegen. X und Y Coordinate der PictureBoxen werden random generiert. Naja dabei kommt es ab und an vor das die Bilder auf einander treffen. Da ich die Coordinaten nicht extra in einer Variablen zwischenspeichern will versuche ich die picturebox Kollision über die aktuelle Postion abzufangen.
Jetzt zu meinem Problem wie kann ich es abfangen das sobald der Rand einer Picturbox den Rand der andern PictureBox berührt oder überlapt ?

ich habe es schon mit


if(pictureBox4.Bounds.Bottom == pictureBox1.Bounds.Top)
{
... neue Coordinaten ereugen.!!
}

mit


if(pictureBox4.Location == pictureBox1.Location)
{
... neue Coordinaten ereugen.!!
}

aber irgentwie will das net so wie ich.

mfg

BlauBär

T
75 Beiträge seit 2007
vor 15 Jahren
  
if(pictureBox4.Location == pictureBox1.Location)  
{  
... neue Coordinaten ereugen.!!  
}  
  

Hey Blaubär,
der gepostete Code kann nicht funktionieren, weil hier nur die oberen linken Punkte der Picturebox verglichen werden.
Die Kollisionsabfrage muss mehr umfassen.
Und zwar brauchst du jeweils den oberen linken Punkt (also die Location) und die Breite und Höhe.
PictureBox1: Location (x1|y1) Breite: b1 Höhe: h1
PictureBox2: Location (x2|y2) Breite: b2 Höhe: h2


if( !(x1+b1 < x2 || x1 > x2+b2 || y1+h1 < y2 || y1 > y2+h2)) 
{
    // Kollision
}

Damit müsste es gehen.

Viele Grüße und ich hoffe du kannst was damit anfangen.

Till-H

148 Beiträge seit 2006
vor 15 Jahren

Hallo zusammen..

  
if( !(x1+b1 < x2 || x1 > x2+b2 || y1+h1 < y2 || y1 > y2+h2))  
{  
    // Kollision  
}  
  

ich glaube das wird nicht ganz funktionieren.. eine Oder-Verknüpfung zu negieren ist das gleiche, wie jedes einzelne Teilstück zu negieren und mit Und zu verknüpfen..
ich glaube dann stimmt deine formel da oben nicht mehr so ganz..

ich habe das problem damals anders gelöst.. du nimmst deine erste PictureBox und erstellst aus ihren Maßen ein Rectangle.. (Location.X, Location.Y, Widht, Height), das gleiche machst du mit der zweiten PictureBox..
anschließend machst du ein


Rectangle rect = Rectangle.Intersect(rect1, rect2);
if(rect != Rectangle.Empty)
   // Kollision

greetz..

I cna tpye 300 wrods pre mnuite!

D
39 Beiträge seit 2007
vor 15 Jahren

Hallo zusammen,

um zu kontrollieren ob eine Kollision vorliegt musst man nicht extra jedes mal ein neues Rectangle erstellen. Stattdessen nimmst du einfach PictureBox.ClientRectangle.


if(Rectangle.Intersects(pictureBox1.ClientRectangle, pictureBox2.ClientRectangle!= Rectangle.Empty)
// Kollision

MfG Diggler

WTF ist ein Constructor?! 👶