MrLoverShaggy Geschrieben 10. Februar 2010 Geschrieben 10. Februar 2010 Hallo, und zwar hab ich 2 Pictureboxen: Wenn sich beide berühren, soll ein bestimmtes Ereignis ausgeführt werden. Wie kann ich das bewerkstelligen? Das bisher gefundene hat nicht funkioniert. Gruß mrlovershaggy Zitieren
Klotzkopp Geschrieben 10. Februar 2010 Geschrieben 10. Februar 2010 Wie kann ich das bewerkstelligen?Indem du prüfst, ob sie sich berühren, jedesmal nachdem du sie bewegt hast, und dann gegebenenfalls dieses Ereignis auslöst. Das bisher gefundene hat nicht funkioniert.Dann ist da vermutlich etwas schiefgelaufen. Übrigens: Die Genauigkeit der Hilfe hängt ab von der Genauigkeit der Problembeschreibung. Zitieren
MrLoverShaggy Geschrieben 10. Februar 2010 Autor Geschrieben 10. Februar 2010 Indem du prüfst, ob sie sich berühren, jedesmal nachdem du sie bewegt hast, und dann gegebenenfalls dieses Ereignis auslöst. Dann ist da vermutlich etwas schiefgelaufen. Übrigens: Die Genauigkeit der Hilfe hängt ab von der Genauigkeit der Problembeschreibung. Okay, ich hab Folgendes bereits ausprobiert: if (ameise_spieler1.Location.X.ToString() == baum_element.Location.X.ToString() && ameise_spieler1.Location.Y.ToString() == baum_element.Location.Y.ToString()) { MessageBox.Show("Test"); } Also ich hab 2 Pictureboxen(ameise_Spieler1 und baum_element) und wenn diese 2 sich berühren, soll eine MessageBox angezeigt werden.Deswegen dachte ich mir, dass ich von Beiden die Location vergleiche und wenn dies übereinstimmt, dann wird die MessageBox ausgelöst. Das Ergebnis war, dass sich beide Pictureboxen überlagern, aber keine MessageBox ausgelöst wird. Zitieren
Klotzkopp Geschrieben 10. Februar 2010 Geschrieben 10. Februar 2010 Deswegen dachte ich mir, dass ich von Beiden die Location vergleiche und wenn dies übereinstimmt, dann wird die MessageBox ausgelöst.Gut, die erste Frage wäre, wo dieser Code steht, d.h. ob er überhaupt zum passenden Zeitpunkt ausgeführt wird. Noch wichtiger ist aber, dass es nicht ausreicht, die Koordinaten auf Gleichheit zu prüfen, außer deine beiden Pictureboxen sind beide nur 1 x 1 Pixel groß. Wenn beispielsweise der Baum eine Breite von 20 Pixeln hat, und die Ameise eine von 10, dann findet in der horizontalen eine Berührung möglicherweise schon dann statt, wenn Ameise.X zwischen Baum.X - 10 und Baum.X + 20 liegt. Du musst also die Ausdehnung deiner Kollisionsobjekte beachten. Das alles berücksichtigt übrigens noch gar nicht irgendwelche transparenten Teile der Bilder, sondern reduziert die Objekte bezüglich der Kollisionserkennung auf einfache Rechtecke. Ist das ausreichend? Zitieren
MrLoverShaggy Geschrieben 10. Februar 2010 Autor Geschrieben 10. Februar 2010 (bearbeitet) Das ist mir bewusst, dass ich ein Augenmerk auf meine Kollisionsobjekte legen muss. Aber ich weiß gar nicht, wie ich das abfragen kann. Das ist mein Problem. Wie soll ich jetzt weiter verfahren? Bearbeitet 10. Februar 2010 von MrLoverShaggy Zitieren
Klotzkopp Geschrieben 10. Februar 2010 Geschrieben 10. Februar 2010 Aber ich weiß gar nicht, wie ich das abfragen kann. Das ist mein Problem. Wie soll ich jetzt weiter verfahren?Ich hab's doch fast schon vorgesagt. Die Objekte kollidieren nicht bei Gleichheit, sondern wenn sie in einem bestimmten Bereich sind. Es gibt jeweils eine Ober- und eine Untergrenze, die von der Position des jeweiligen anderen Objekts und der Ausdehung der Objekte abhängt. Ob ein Wert in einem bestimmten Bereich liegt, prüfst du so: wert > Untergrenze && wert < Obergrenze Zitieren
0815FIA Geschrieben 10. Februar 2010 Geschrieben 10. Februar 2010 Müßte man das nicht auch einfacher über das Move Event, und dann über Region.IntersectsWith(Region bla) lösen können? Zitieren
Goulasz Geschrieben 11. Februar 2010 Geschrieben 11. Februar 2010 (bearbeitet) So sieht das dann aus, wenn man das wie 0815FIA machen mag. private void PictureBox_MouseDown(object sender, MouseEventArgs e) { isDragging = true; currentX = e.X; currentY = e.Y; } private void PictureBox_MouseMove(object sender, MouseEventArgs e) { PictureBox Aktuell = (PictureBox)sender; if (isDragging) { Aktuell.Top = Aktuell.Top + (e.Y - currentY); Aktuell.Left = Aktuell.Left + (e.X - currentX); } if (pictureBox1.Bounds.IntersectsWith(pictureBox2.Bounds)) { MessageBox.Show("BONK"); } } Den MessageBox Part kannst du dann durch deine Methode ersetzen, jenachdem was da dann apssieren soll. Gruß, Zieg0re Bearbeitet 11. Februar 2010 von Goulasz Erst denken, dann posten >_< Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.