Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

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.
  • Autor
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.

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?

  • Autor

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 von MrLoverShaggy

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

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 >_<

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.