Seite 1 von 1

Physik/FPS anpassen

Verfasst: 19.11.2004 17:31
von Hellboy
Hi,
ich habe eine sehr sehr einfache Physik Engine für ein Spiel geschrieben. Jetzt möchte ich, dass ser spieler bei jeder FPS zahl gleich schnell fällt und springt.

So wie es bei diesem Beispiel auch mit dem laufen ist:

Code: Alles auswählen

Player(0)\x = Player(0)\x + (#PixelProMS * MSDurchlauf)
PixelProMS sind hier wie viele Pixel der Spieler in einer MS laufen soll, und MSDurchlauf sind die MS, die für einen Durchlauf der Hauptschleife gebraucht werden. (Bei 100 FPS - 10 MS pro Durchlauf)

Die verkürzte Hauptschleife sieht so aus:

Code: Alles auswählen

Repeat
 FlipBuffers()
 ExamineKeyboard()

 FPS = fps()
 MSDurchlauf.f = 1000 / FPS
 
 ;{ Links Rechts Bewegen
 ;}

 ;{ Springen
 If KeyboardPushed(#PB_Key_LeftAlt) And Player(0)\Jump = #False
  Player(0)\Vy = 1.7
  Player(0)\Jump = #True
 EndIf
 ;}

 ;{ Physik
 If CheckBoden(Player(0)\x, Player(0)\y) = 0 And Player(0)\Jump = #False
  Player(0)\Jump = #True
 EndIf
 
 If Player(0)\Jump = #True
  Player(0)\Vy = Player(0)\Vy - #GravitationProMS * MSDurchlauf
  Player(0)\y = Player(0)\y - Player(0)\Vy
  
  For i = 0 To Int(Player(0)\Vy) Step - 1
   If CheckBoden(Player(0)\x, Player(0)\y - i) = 1
    Player(0)\Jump = #False
    Player(0)\Vy = 0
    Player(0)\y = Player(0)\y - i
   EndIf
  Next

 EndIf
 ;}

 ;{ Player Sprite Zeichen
 ;}
 
Until KeyboardReleased(#PB_Key_Escape)
Player(0)\Vy = velocity

Der falsche Teil ist glaube ich der:

Code: Alles auswählen

  Player(0)\Vy = Player(0)\Vy - #GravitationProMS * MSDurchlauf
  Player(0)\y = Player(0)\y - Player(0)\Vy
Würde mich freuen, wenn ihr mir helfen könntet.

Verfasst: 19.11.2004 17:32
von Lars
Du musst natürlich die Spilerbewegung auch in Pixel/ms machen und
entsprechend mit [c]MSDurchlauf[/c] multiplizieren.

Verfasst: 19.11.2004 17:43
von Hellboy
sry wenn die Frage jetzt irgendwie dumm ist, aber welche Spielerbewegung meint du?

Verfasst: 19.11.2004 23:38
von Lars
Hellboy hat geschrieben:welche Spielerbewegung meint du?

Code: Alles auswählen

Player(0)\Vy = Player(0)\Vy - #GravitationProMS * MSDurchlauf 
Player(0)\y = Player(0)\y - Player(0)\Vy 
Das erste verändert ja die geschwindigkeit, da wird bereits mit MS
gerechnet, das zweite bewegt dann letztendlich und da spielen MS keine
Rolle mehr, was ein Fehler ist.

Verfasst: 21.11.2004 17:36
von Hellboy
Herzlichen Dank
Jetzt hab ich's auch gerallt :)