Kollisionsabfrage
-
Hi,
da ich nach mehreren Stunden des herum googelns noch immer nichts gefunden habe stell ich euch jetzt einfach mein problem.Und zwar will ich einfach nur abfragen ob ein picterbox eine andere brühet.
Wie kann ich das machen...???
ich programmier mit Microsoft Visual Studio 2005 Professionel.
MfG (Wenn mir dafür jemand nen Quellcode posten könnte wär das extrem nett
)
-
Wenn du eine gescheite Information erhalten möchtest, solltest/könntest du ein bischen mehr erzählen was du meinst. Ob es sich beispielsweise um 2D-oder 3D-Kollisionen handelt. Wenn du 2D meinst, überprüfst du einfah den Translatef Wert mit dem von dem zu kollidierenden Objekt.
-
also es ist eine 2D Kollision von einfach 2 Bildern...
bei Visual Studio heißen diese picterboxen und ich will einfach wissen wann die eine eine andere berühet?MfG
-
@pivke:
evtl. erst einmal in Erfahrung bringen was eine PictureBox ist...@Sleek
Du weisst ja die Koordinaten der beiden Boxen, bzw. x, y, Breite und Höhe.
Jetzt musst du einfach eine simple Rechteck - Kollision ausführen.Also prüfen, ob sich die Koordinaten überlappen.
-
hmmm ja also ich vergleiche jetzt immer einfach die location...
da ist aber nur das problem das das nur ein punkt ist(X,Y).
die picterbox ist aber 20 pixel groß und ich will ja alle äußeren abfragen also 80 Stück....
das kann man doch bestimmt irgendwie machen ohne 1000 if/else schleigen.
-
Du hast den oberen Linken Punkt und die breite + Höhe der Box, denk mal drüber nach.
-
Ich hab was ähnliches,
habs mit Schleifen gelöst das reicht bei
mir um flüssig zu laufen. Was allerdings mein
Problem noch ist:
Ich hab Kreis mit nem Radius von 15 Pixeln
auf Bild Objekten mit ner Größe von 30x30 Pixel.
Hat jemand eine Idee wie ich eine Kollisionsabfrage
machen kann nur für die Kreise?
-
Du musst die Radien der Kreise multiplizieren und dann schauen was rauskommt undüberprüfen ob sich das Ergebnis mit dem anderen kreis überschneidet.
-
Du musst die Radien der Kreise multiplizieren und dann schauen was rauskommt undüberprüfen ob sich das Ergebnis mit dem anderen Kreis überschneidet.
-
wenn (x1|y1) der untere linke punkt der ersten box ist, und die box w1 breit und h1 hoch ist, und wenn (x2|y2) der untere linke Punkt der zweiten box ist und die zweite box w2 breit und h2 hoch ist, dann machst du einfach:
if( !(x1+w1 < x2 || x1 > x2+w2 || y1+h1 < y2 || y1 > y2+h2)) { // Kollision }
-
Danke Heinzelotto das klappt danke danke danke