Registriert: Di Nov 29, 2005 21:11 Beiträge: 88 Wohnort: Bonn
Moin!
Die Antworten aus der Suche bringen mich nicht weiter, ich hoffe es ist okay, wenn ich hier noch nen Kollisions Thread aufmache...
Okay, also ich bin 2d (mit glOrtho) (vogelperspektive) und habe ganz viele kleine Textur-Tiles, die ich alle als Quads auf ein Panel zeichne.
Drauf kommt dann noch die Spielfigur, auch ein Quad mit Textur. Bewegen kann ich mich, bloß interessiert sich die Spielfigur nen Dreck für das "Level" - is klar, denk ich mir, kann er ja nicht wissen.. Okay, Kollision muss her.
Hab tagelang über das Prinzip nachgedacht, wie überhaupt und wie könnte man das machen...
Letztenendes bin ich folgendermaßen verfahren: Habe für jedes Tile ein schwarz-weiß Pendant erstellt mit weiß=gleich begehbar und schwarz = blockiert
Wenn mein Programm nun ein Level lädt, erstell es sich aus den Levelinformaionen auch ein s/w Abbild des Levels
Und wenn man die Figur bewegt wird erst überprüft, ob die Stelle wo man sich hinbewegen will auch "weiß" ist
War mächtig stolz, dass ich da rauf gekommen bin, aber leider leider... funktioniert es nicht ganz...
Ich habe eine Vermutung, aber die ist vage...
Ich habe zu Kontrollzwecken den Mauscursor immer an die zu überprüfende Stelle gesetzt und mir ist aufgefallen, dass der Mauszeiger sozusagen ne Verzögerung hat. Also wenn ich die Taste runterdrücke wird er einmal richtig gesetzt und verharrt ne Weile auf der Position, obwohl sich die Figur weiterbewegt. Nach dieser kurzen Weile folgt er der Figur wieder korrekt.
Wenn ich nun aus großer Entfernung auf ein hinderniss zu laufe, funktioniert alles tadellos. Wenn man aber dann ein kleines Stück zurückgeht und wieder gegen die Wand läuft, läuft man in die Wand rein. Ich glaube, dass das mit der Verzögerung zu tun hat.
Entschuldigt diese Ausführungen, aber wer bis hier hin durchgehalten hat, hat sicher auch nen Tipp parat
Spontane Idee: Lege ein Zweidimensionales Array (Mit der Länge deiner Tiles) an (Was du wahrscheinlich eh bereits für deine Tiles getan hast) und speichere dort, ob das Tile begehbar ist oder nicht mit einfachen booleans.
Code:
var
Collision:arrayofarrayofboolean;
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
das hat er ja auf die eine oder andere weise eh schon gelöst... gehen kann er ja *g*
ich verstehe nicht 100%ig...
Zitat:
Ich habe zu Kontrollzwecken den Mauscursor immer an die zu überprüfende Stelle gesetzt und mir ist aufgefallen, dass der Mauszeiger sozusagen ne Verzögerung hat. Also wenn ich die Taste runterdrücke wird er einmal richtig gesetzt und verharrt ne Weile auf der Position, obwohl sich die Figur weiterbewegt. Nach dieser kurzen Weile folgt er der Figur wieder korrekt.
ich würde mir die koordinaten des mauscursors und der figur ausgeben lassen (in der caption im fenstermodus wäre wohl am einfachsten ) und hier den fehler
suchen. wenn ich dich richtig verstanden habe, müssen die koordinaten ja in einem gewissen verhältnis zueinander stehen (bzw gleich sein?). vielleicht kannst
du so den fehler entdecken. mein bugtracking ist manchmal etwas fantasievoll *g* ... dafür funktionierts für mich immer *ggggg*
oder: wenn er sich in die wand bewegt... vielleicht fehlt eine art abbruch? ... ich komm leider mit deinen erläuterungen nicht 100%ig klar. tut leid.
Registriert: Di Nov 29, 2005 21:11 Beiträge: 88 Wohnort: Bonn
hab ich auch dran gedacht, aber die tiles sind meistens zum teil begehbar,
also es ist nicht so, dass man die tiles generel in begehbar / unbegehbar unterteilen kann
oder auch ist beispielsweise ein burgwall zwei tiles breit und der "weg" auf dem burgwall ist in der mitte, halb auf dem einen, halb auf dem anderent tile
Achso. Dann sag das halt. Dann würde ich an deiner Stelle die Tiles so unterteilen, dass man pro Tile tatsächlich sagen kann, es ist komplett begehbar oder auch nicht.
Du könntest zwar über ein Bitmap prüfen, wo genau dein Tile jetzt begehbar ist oder nicht, aber das ist ein echter Performance-Killer. Habe das schonmal bei einem primitiven Autorennen aus der Vogelperspektive gemacht... Billigstes Canvas
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Registriert: Di Nov 29, 2005 21:11 Beiträge: 88 Wohnort: Bonn
die maus wird an die stelle positioniert, die kontrolliert wird
also irgenwo vor den augen der spielfigur
das war nur, damit ich sehen konnte, wo er überprüft
wenn man weit genug anlauf nimmt rennt man gegen die wand insofern funktioniert der abbruch
nur wenn man kurz kehrt macht und zurückkommt gehsts nicht
Registriert: Di Nov 29, 2005 21:11 Beiträge: 88 Wohnort: Bonn
Gibt es eine Möglichkeit in meinem Programm eine ordentliche Kollisionsabfrage zu implementieren, ohne die Tiles so klein zu machen, dass man eindeutig sagen kann begehbar nicht begehbar?
Oder, andere Frage: Warum spinnt meine Kollisionsabfrage?
Ich versuche mal das Programm hochzuladen, vielleicht hat jemand die Nerven, gegen Büsche zu laufen
Ich will zwar nicht behaupten, dass ich die Weisheit mit Löffeln gegessen hätte, aber eine Kollisionsabfrage, wie du sie dir momentan vorstellst, halte ich für nicht sehr elegant, um es mal so zu sagen.
Mir fallen da 2 bessere Alternativen ein:
Kleinere Tiles nehmen
Tiles bei der jetzigen Größe belassen und für jedes Tile statt einem einzigen Boolean ein 3x3 boolean-Array anlegen. Somit hast du dann pro Tile 9 kleine Felder, die du überprüfen kannst.
Kleines Beispiel für die letzte Variante:
Code:
###
...
###
Oder:
###
..#
#.#
Oder auch:
#.#
...
#.#
_________________ "Für kein Tier wird so viel gearbeitet wie für die Katz'."
Mitglieder in diesem Forum: 0 Mitglieder und 4 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.