Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Fr Jul 18, 2025 00:01

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 45 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Autor Nachricht
 Betreff des Beitrags: 2d kollision
BeitragVerfasst: Di Nov 29, 2005 21:33 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 21:51 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
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:
  1. var
  2.   Collision: array of array of boolean;

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 21:57 
Offline
DGL Member

Registriert: Do Okt 20, 2005 17:28
Beiträge: 51
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.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 21:58 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:03 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
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'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:03 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
hier ist mal n screen shot
verurteilt mich nicht, die texturen sind böse geklaut, ich weiß


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:04 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Jetzt bin ich etwas verwirrt... So wie ich es zuerst beschrieben habe, müsste es doch problemlos gehen (Also mit einfachen booleans)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:05 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:06 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
Frase hat geschrieben:
Jetzt bin ich etwas verwirrt... So wie ich es zuerst beschrieben habe, müsste es doch problemlos gehen (Also mit einfachen booleans)


naja, der screenshot war unglücklich gewählt, ich gebs zu

also es gibt sie, die zum teil begehbaren tiles


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:07 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Tu mir einen Gefallen und stell deine Frage in einem oder zwei zusammenhängenden Sätzen...

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:11 
Offline
DGL Member
Benutzeravatar

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


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:16 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
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:
  1. ###
  2. ...
  3. ###
  4.  
  5. Oder:
  6.  
  7. ###
  8. ..#
  9. #.#
  10.  
  11. Oder auch:
  12.  
  13. #.#
  14. ...
  15. #.#

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:19 
Offline
DGL Member

Registriert: Do Okt 20, 2005 17:28
Beiträge: 51
ich würde auch sagen, mach ein gscheites (2d)-array und mach das mit den tiles neu.

sprich 1 byte pro tile (nona *g*), boolean... wie frase vorgeschlagen hat.

sprich: schmeiß deine karte weg und definier die tiles neu *g* ein teilweise begehbares tile klingt für mich
nach ur viel mehrarbeit.

bei schwachsinn korrigiert mich, ich bin müde *g*


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:19 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 29, 2005 21:11
Beiträge: 88
Wohnort: Bonn
hier ist das programm


Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Nov 29, 2005 22:20 
Offline
Forenkatze
Benutzeravatar

Registriert: Mi Okt 22, 2003 18:30
Beiträge: 1945
Wohnort: Närnberch
Programmiersprache: Scala, Java, C*
Meine letzte Variante sollte aber schon mehr als ausreichend sein...

P.S.: Wenn du den Source mit reinpacken würdest, würde das evtl. zur schnelleren Lösung des Problems beitragen ;)

_________________
"Für kein Tier wird so viel gearbeitet wie für die Katz'."


Zuletzt geändert von Frase am Di Nov 29, 2005 22:21, insgesamt 1-mal geändert.

Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 45 Beiträge ]  Gehe zu Seite 1, 2, 3  Nächste
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

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.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.009s | 15 Queries | GZIP : On ]