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
|
Verfasst am: 04.09.2005, 16:12 Titel: |
|
|
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 |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 04.09.2005, 19:16 Titel: |
|
|
OLiver hat Folgendes geschrieben: |
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...  |
|
Nach oben |
|
 |
Fallen JLI MVP


Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 04.09.2005, 19:19 Titel: |
|
|
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 |
|
 |
DirectXer Dark JLI'ler

Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 04.09.2005, 19:23 Titel: |
|
|
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
</doofer Spammodus>
sry, musste sein  |
|
Nach oben |
|
 |
GreveN JLI Master

Alter: 38 Anmeldedatum: 08.01.2004 Beiträge: 901 Wohnort: Sachsen - Dresden Medaillen: Keine
|
Verfasst am: 04.09.2005, 19:34 Titel: |
|
|
DirectXer hat Folgendes geschrieben: |
<doofer Spammodus>
funktion int()? kenn ich gar net
</doofer Spammodus>
sry, musste sein  |
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 |
|
 |
Beni5 Super JLI'ler
Alter: 36 Anmeldedatum: 12.11.2003 Beiträge: 310 Wohnort: Switzerland Medaillen: Keine
|
Verfasst am: 04.09.2005, 22:08 Titel: |
|
|
Achso, vielen dank!  |
|
Nach oben |
|
 |
alexm Mini JLI'ler

Anmeldedatum: 20.11.2005 Beiträge: 15 Wohnort: Wien Medaillen: Keine
|
Verfasst am: 27.11.2005, 10:16 Titel: |
|
|
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 |
|
 |
Patrick Dark JLI Master

Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
|
Nach oben |
|
 |
Loigie Junior JLI'ler

Anmeldedatum: 29.06.2004 Beiträge: 52 Wohnort: NRW Medaillen: Keine
|
Verfasst am: 27.11.2005, 12:58 Titel: |
|
|
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 |
|
 |
|