Frameunabhängigkeit mit künstlicher Verzögerung
Übersicht

mathiasBetreff: Frameunabhängigkeit mit künstlicher Verzögerung |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
ich habe den Programmcode der frameunabhängigen Programmierung aufgegriffen und wollte zusätzlich eine Verzögerung miteinbauen. Ich möchte in einem Spiel den Schwierigkeitsgrad je Level durch unterschiedliche Geschwindigkeit der Figur anpassen. Leider bewegt sich das Quadrat in dem unten aufgelisteten Code sehr unregelmäßig. Kann mir jemand helfen ? Hier der Beispielcode mit der künstlichen Verzögerung (in diesem Fall von 10 Millisekunden) : Code: [AUSKLAPPEN] Graphics 640, 480,16,2
SetBuffer BackBuffer() a=False While Not KeyHit(1) StartZeit = MilliSecs() Cls If a=False Then b=MilliSecs():a=True If MilliSecs()-b>10 Then ;Bewegen des Quadrats Position = Position + (1 * Schleifenzeit) ;Wenn Quadrat ganz Rechts dann setze Quadrat nach ganz links If Position > (640 - 16) Then Position = 0 a=False End If ;Zeichnen des Quadrates Rect Position, (240 - 8), 16, 16 Flip 0;60FPS Begrenzung ausschalten SchleifenZeit = MilliSecs() - Startzeit Wend |
||
totonak5 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
würde es so machen:
Code: [AUSKLAPPEN] Graphics 640, 480,16,2
SetBuffer BackBuffer() While Not KeyHit(1) Cls If Startzeit = 0 Then StartZeit = MilliSecs() If MilliSecs() - Startzeit > 10 X = X + 1 Startzeit = 0 EndIf Rect X,220,40,40 Flip Wend |
||
Just for Fun!
Jesus loves U! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@totonak, und was ist wenn ein alter Rechner es nicht schafft innerhalb 10ms einen Schleifendurchlauf zu machen?
Hier mal ein Beispielcode.Code: [AUSKLAPPEN] Graphics 400,400,0,2
SetBuffer BackBuffer() td%=1 ;ZeitDifferenz (Bewegungsmultiplikator) tp%=MilliSecs() ;MilliSecs Zwischenspeicher xp#=100 ;X-Position yp#=100 ;Y-Position xg#=0 ;X-Geschwindigkeit yg#=0 ;Y-Geschwindigkeit ;Hauptschleife While Not KeyHit(1) If KeyDown(203) Then xg=xg-0.001*td If KeyDown(205) Then xg=xg+0.001*td If KeyDown(200) Then yg=yg-0.001*td If KeyDown(208) Then yg=yg+0.001*td xg=xg/((0.001*td)+1) yg=yg/((0.001*td)+1) xp=xp+xg*td yp=yp+yg*td If xp>400 Then xp=xp-400 If yp>400 Then yp=yp-400 If xp<0 Then xp=xp+400 If yp<0 Then yp=yp+400 Rect xp-4,yp-4,9,9,1 ;Langsamen Rechner simulieren mit SPACE If KeyHit(57) Then w=1-w If w=1 Then Delay 40 ;Frameless ms=MilliSecs() td=ms-tp tp=ms Flip Cls Wend End Alle Bewegungen werden mit der td-Variable multipliziert. Beschleunigungen müssen auch angepasst werden, weil die Anzahl der Schleifendurchläufe pro Zeit nicht konstant ist. Beides wurde hier mit eingebracht... Eines ist jedoch noch wichtig! Oft wird 'vergessen' das man solch Variablen im Programm stehen hat. Daher müssen die Variablen immer nach einer Spielunterbrechung, wie Menüaufruf oder Pause, neu gesetzt werden. Sonst kann es unter Umständen sein das die Spielfigur einige Kilometer weit aus dem Bildschirm gezeichnet wird. Und das wollen wir ja alle nicht. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group