Frameunabhängigkeit mit künstlicher Verzögerung

Übersicht BlitzBasic Allgemein

Neue Antwort erstellen

 

mathias

Betreff: Frameunabhängigkeit mit künstlicher Verzögerung

BeitragDi, Feb 14, 2006 22:50
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragDi, Feb 14, 2006 23:11
Antworten mit Zitat
Benutzer-Profile anzeigen
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!

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Feb 15, 2006 2:31
Antworten mit Zitat
Benutzer-Profile anzeigen
@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.

Neue Antwort erstellen


Übersicht BlitzBasic Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group