Zum Inhalt springen

Pictureboxen Berührung


MrLoverShaggy

Empfohlene Beiträge

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.
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Goulasz
Erst denken, dann posten >_<
Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...