Hilfe bei Pixelgenauer Kollision



  • Hi,
    ne ich wollte das ganze nicht in VB haben sodern schon in C++ daher könntest du mir dabei doch helfen 🙂

    Gruß



  • Pixelgenaue Kollision ist nicht sinnvoll, weil es dir dann später unmöglich ist, die Darstellung (z.B. auf 3D) umzustellen oder das Raumschiff-Bitmap zu ändern, ohne die ganze Logik mitzureißen. Nimm Bounding-Polygone, vielleicht reicht ein Rechteck ja auch. Du kannst auch den Raum, den ein Raumschiff ausfüllt, mit mehreren Rechtecken abdecken, aber pixelgenau ist nicht sinnvoll.



  • Hi danke für die Antwort,
    das was du geschrieben hast hört sich recht verständlich an, aber unter einer Bounding-Polygone kann ich mir nichts drunter vorstellen und ich habe diesen Begriff auch noch nicht gehört. Ich hab schon bei Google danach gesucht aber leider nicht soviel gefunden. Hätte da jemand etwas Beispielcode wie das genau aussieht und was dass für das Raumschiff bedeutet wenn ich das ganze so mache? Bleibt das raumschiff dann nicht mehr an ecken hängen weils an einer Seite länger ist?

    Also Beispielcode wäre auch hier wieder echt toll 🙂

    Gruß

    Danke



  • Naja ... er hat das ein wenig verkehrt bezeichnet ^^
    Ich denke er meint Bounding-Boxes ... das sind gedachte Körper um ein Objekt! Man misst sie meist am Größten Koordinaten Ausschlag!



  • Von BoundingBoxes war ja die ganze Zeit die Rede.
    Meinst du vielleicht sowas:

    http://bloody-blades.de/shit.jpg *g*

    ?



  • Auf jeden Fall ein witziges Bild ^^
    Ich seh nur keine Mauer :p



  • FoxDie schrieb:

    Auf jeden Fall ein witziges Bild ^^
    Ich seh nur keine Mauer :p

    Das Graue soll die Mauer sein; ich habs nur leider ungünstig gemalt und den Text auf die Mauer geschrieben.
    Eine Kollision findet statt, wenn die Boundingbox die Mauer schneidet.

    ::edit:: is doch sogar en gelbes Kreuz an der Kollisionsstelle 😃



  • Hi Danke,
    wie im ersten Beitrag beschrieben habe ich für eien ganz normale Bounding Box Kollision, also ein Rechteck schon Code...
    Wenn ich aber nun für jedes Objekt so eine Angepasste Box -wie oben im Bild- machen würde wäre das wohl extrem viel Arbeit!
    Gibt es code der sich sowas ähnliches selber berechnet?
    Wobei dann ja eigentlich immernoch die Kollision VOR dem Raumschiff statt findet, aber wäre sicher als Schutzschild gut *g*

    Ich weiss nun nicht genau was ich nehmen soll da die Pixelgenaue zu langsam ist und die andere (Raumschiff Beispiel-Bild) anscheinend zuviel Aufwand erzeugt (da ich mit RECTs sowieso schon nicht so gut klar komme *g*)

    Was sollte ich an euer Stelle wohl nun tuen?

    Gruß

    PS: Heisst es tun oder tuen?!

    Danke



  • Nimm doch eine Box als vorprüfung ... nicht jeder Schuß trifft ... wenn die Box eine Kolision anzeigt, dann überprüfst du ob ein Kolision bzw. Wo genau eine statfinden tut. Um die Berechnungszeit ein wenig zu verringern machst du eine Vorprüfung
    z.B.
    Kugel bewegt sich auf Y200 entlang der X Achse ... die BB meldet eine wahrscheinliche Kolision ... Überprüfe welchen Teil des Schiffes die Kugel treffen könnte (Rechts-Oben, Links-Oben, Rechts-Mitte usw.) ... jetzt prüfst du diesen Abschnitt der Matrix auf Kolision



  • Du müsstest dir ein kleines Programm schreiben, wo du dein Bild laden und dann mit der Maus die Boundind-*Striche* ziehen kannst. Die Koordinaten der Eckpunkte werden dann in eine extra Datei geschrieben.

    E.g.
    Du hast die Dateien banana.jpg und banana.bbd (bounding box data :P)

    Das Bild wird an Position x|y gemalt.

    In banana.bbd steht jetzt, dass die Boundingbox die Eckpunkte an 35|4, 48|10 und 20|8 hat.

    Dann sind deine Eckpunkte der Boundingbox ingame dann eben x+35|y+4 (z.B.)



  • Dummie schrieb:

    PS: Heisst es tun oder tuen?!

    Danke

    Hallo Dummie, 😉
    es heißt tun.



  • xindon schrieb:

    Du müsstest dir ein kleines Programm schreiben, wo du dein Bild laden und dann mit der Maus die Boundind-*Striche* ziehen kannst. Die Koordinaten der Eckpunkte werden dann in eine extra Datei geschrieben.

    E.g.
    Du hast die Dateien banana.jpg und banana.bbd (bounding box data :P)

    Das Bild wird an Position x|y gemalt.

    In banana.bbd steht jetzt, dass die Boundingbox die Eckpunkte an 35|4, 48|10 und 20|8 hat.

    Dann sind deine Eckpunkte der Boundingbox ingame dann eben x+35|y+4 (z.B.)

    Du meinst collision shapes ? 🙂



  • Netzwerk-Latenz schrieb:

    Du meinst collision shapes ? 🙂

    GANZ GENAU! 🙂

    Ich wusste nicht wie es heißt, dankeschön 🙂

    Also Threadersteller, mein Vorschlag sind wie schon gesagt Bounding Shapes / Collision Shapes.



  • In ClanLib gibts eine Klasse, die Collision Shapes direkt aus Pixmaps erstellen kann und auch für Kollisionsberechnungen nutzen.


Anmelden zum Antworten