JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.phpMedaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

2D Jump&Run Spiel Kollisionserkennung
Gehe zu Seite Zurück  1, 2
 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 04.09.2005, 16:12    Titel: Antworten mit Zitat

Naja, ich muss ja die geschwindigkeit mit der sich der Speiler bewegt irgendwie mit der Framerate berechnen, damit er auf jedem Rechner gleich schnell geht. Die Geschwindigkeit wird halt immer zur Position addiert, so bewegt er sich. Das Level besteht nur aus integer genauigkeit. Das ist eigentlich schon alles, die Kollision wir dwie oben durchgeführt.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 04.09.2005, 19:16    Titel: Antworten mit Zitat

OLiver hat Folgendes geschrieben:
Zitat:

WIe kommt das?


Liegt an der Ungenauigkeit der Gleitkommazahlen, das hatte ich auch schonmal erlebt, seitdem benutz ich nie wieder float/double, nur im äußersten Notfall, bei jump'n run würde sicher auch Gleitkommaverschiebung ausreichen...

das könntest du z.B. mit einer EPSILON-Konstante lösen, falls du das kennst. Is aber auch nur eine Möglichkeit unter vielen... Smile
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 04.09.2005, 19:19    Titel: Antworten mit Zitat

Beni5 hat Folgendes geschrieben:
Wie macht ihr das eigentlich mit eurer Kollision?
Ich mach das immer so:

(int)Player.vPos.y >= Boden

Dabei wird also die float Playerposition in int umgewandelt und mit dem Boden verglichen der bereits int ist.
Jedoch kommt es manchmal vor das mein Player dann ein Pixel weiter im Boden ist und manchmal nicht. WIe kommt das?


sollte man da nicht eher sowas wie hier schreiben:

int(Player.vPos.y+0.5) >= Boden

?
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 04.09.2005, 19:23    Titel: Antworten mit Zitat

Fallen hat Folgendes geschrieben:
Beni5 hat Folgendes geschrieben:
Wie macht ihr das eigentlich mit eurer Kollision?
Ich mach das immer so:

(int)Player.vPos.y >= Boden

Dabei wird also die float Playerposition in int umgewandelt und mit dem Boden verglichen der bereits int ist.
Jedoch kommt es manchmal vor das mein Player dann ein Pixel weiter im Boden ist und manchmal nicht. WIe kommt das?


sollte man da nicht eher sowas wie hier schreiben:

int(Player.vPos.y+0.5) >= Boden

?

<doofer Spammodus>
funktion int()? kenn ich gar net Wink
</doofer Spammodus>

sry, musste sein Rolling Eyes
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
GreveN
JLI Master


Alter: 38
Anmeldedatum: 08.01.2004
Beiträge: 901
Wohnort: Sachsen - Dresden
Medaillen: Keine

BeitragVerfasst am: 04.09.2005, 19:34    Titel: Antworten mit Zitat

DirectXer hat Folgendes geschrieben:

<doofer Spammodus>
funktion int()? kenn ich gar net Wink
</doofer Spammodus>

sry, musste sein Rolling Eyes

Das ist ein einfacher Cast.


Fallen hat Folgendes geschrieben:

sollte man da nicht eher sowas wie hier schreiben:

int(Player.vPos.y+0.5) >= Boden

?

Wenn wir einmal dabei sind, man sollte
CPP:
static_cast<int>(Player.vPos.y+0.5) >= Boden

schreiben.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Yahoo Messenger MSN Messenger
Beni5
Super JLI'ler


Alter: 36
Anmeldedatum: 12.11.2003
Beiträge: 310
Wohnort: Switzerland
Medaillen: Keine

BeitragVerfasst am: 04.09.2005, 22:08    Titel: Antworten mit Zitat

Achso, vielen dank! Wink
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
alexm
Mini JLI'ler



Anmeldedatum: 20.11.2005
Beiträge: 15
Wohnort: Wien
Medaillen: Keine

BeitragVerfasst am: 27.11.2005, 10:16    Titel: Antworten mit Zitat

Meiner Meinung nach müsstest Du an Deiner Physik-Engine noch was überdenken.
Bei meinem Jump'n'Run in Flash haut das super hin.
Wenn meine Spielfigur zb. fällt schaut der code in etwa so aus:

Code:

// pseudocode

Kollissionsabfrage auf Player.y + Player.height
(Pivotpoint ist Mitte und oben bei der Grafik)

if( Kollission mit Tile ){

   Y-Bewegungsvektor = 0
   Player.falling = FALSE

}
else if( Y-Bewegungsvektor <= vmax ){

   Y-Bewegungsvektor += vmax
   Player.falling = FALSE

}


wobei mir die objekteigenschaft player.falling bei anderen teilen der playerabfrage sehr hilfreich ist - wie zb. beim springen. der player darf zb. nur springen, wenn Player.falling = FALSE also sicher ist, dass er am boden steht.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 27.11.2005, 10:44    Titel: Antworten mit Zitat

Gab es für das Thema nicht irgendwo mal Code von LOTP?
_________________
'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ]
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Loigie
Junior JLI'ler



Anmeldedatum: 29.06.2004
Beiträge: 52
Wohnort: NRW
Medaillen: Keine

BeitragVerfasst am: 27.11.2005, 12:58    Titel: Antworten mit Zitat

Also bei mir Funktioniert die Kollisionserkennung jetzt.

Als erstes bewege ich das Sprite auf der X Achse(Horizontal) je nachdem welche Taste gedrückt wurde. Falls bei der neuen Position des Sprites eine Kollision auftritt wird das Sprite zurückgesetzt.
Dann darf die Physik Klasse noch den Y Wert verändern, sollte bei der wiederum neuen Position eine Kollision auftreten wird der Y Wert des Sprites Pixelweise zurück gesetzt bis keine Kollision mehr festgestellt wird. Was spätestens beim Ursprünglichem Y Wert seien sollte.
Und jetzt kann das Sprite endlich gerendert werden.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum