collision

  • Themenstarter Themenstarter coolerouny
  • Beginndatum Beginndatum
C

coolerouny

jetzt kommt was schwieriges...
(glaub ich halt)

hat jemand ein example wo:
man zwei objekte hat (zwei gleiche)
die transparent sind, also dass man den "hintergrund" vom image nicht mehr sieht

und wo dann zwischen diesen zwei objekten auf den pixel genau die collision berechnet wird (wenn sie zusammenstoßen)

?

mfg
coolerouny
 
hi coolerouny,

deine objekte(images) sollten doch unabhaengig von ihrem hintergrund eine mathematisch klar definierte form haben, oder?
wenn das so ist, berechnest du den absoluten abstand zwischen diesen formen. sollte dieser 0 sein, erfolgt gerade eine kollision.
schau einfach mal bei otto hesse und seiner analytischen geometrie nach.


 
Hallo!

Zum einen mal kannst du transparente Bilder mittels eines BufferedImage des Typs BufferedImage.TYPE_INT_ARGB darstellen. (Beispielsweise png, oder gif)

Weiterhin würde ich vorschlagen, dass du zur Kollisionsabfrage zuerst mal mit Bounding-Boxes arbeitest. Da damit die allgemeinen Berechnungen schneller von der Hand gehen. (Einfache Kollisionsabfrage) -> Siehe dazu die Klasse Rectangle welche schon Contains etc. Methoden mitbringt.... hat nun ein Objekt die Bounding Box durch brochen...
Könntest du auf pixelgenaue Prüfung umschalten.

Das könnte Beispielsweise so aussehen:

Bit-Repräsentation:
Obj1
00100
01110
00100

Obj2
00100
01110
00100

Zur "Pixelgenauen" Überprüfung geht man nun in einer Schleife über die Spalten und Zeilen welche von der Kollision betroffen sind (die kann man sich aus der aus dem Bounding Box gemeldeten Kollision herleiten) und schaut nach, ob
Obj1[offset] && Obj2[offset] == 1 ist. Wenn ja haben sich die beiden Objekte "berührt". Da diese Operation für jeden Pixel sehr aufwendig und Zeit raubend wäre würde es z.Bsp. auch ausreichen ein Element in der "Bit-Repräsentation" als ein 4*4 Pixel Feld zu werten...
Weiterhin würde ich dir empfehlen mit 1-Dimensionalen Arrays zu arbeiten und die Berechnung von Hand auszuführen ... das geht um einiges schneller ;-)

Gruß Tom
 
Hallo Tom,
ich habe mal ne Frage...
aus welchem Package ist die Klasse Rectangle bzw. die Bounding Box (finde ich leider in der Onlinehilfe meiner IDE gerade nicht, trotz Bemühung.)

Mir ist das noch nicht ganz ob es bei Dir zu einem Schreibfehler kam oder ob es wirklich so gemeint ist
Obj1[Offset] && Obj2[Offset] == 1
müsste das nicht nur mit einem '&' geschrieben sein?

Takidoso
 
k

danke
probier mal was

kann aber sein, dass ich das jetzt überhaupst nicht check... :)

mfg
coolerouny
 
Zurück