fb:porticula NoPaste
12.1: Parallax Scrolling mit FPS-Messung
Uploader: | nemored |
Datum/Zeit: | 24.08.2013 16:19:38 |
Hinweis: Dieser Quelltext ist Bestandteil des Projekts OpenBook: 2D-Spieleprogrammierung, zu dem es auf FreeBASIC-Portal.de eine Projektseite gibt.
' *** CODE 12.1: Parallax Scrolling mit FPS-Messung
DIM AS INTEGER bildbreite = 400, bildhoehe = 300
SCREENRES bildbreite, bildhoehe, 32
DIM AS ANY PTR ebene(1 TO 3) ' Bildspeicher der Ebenen
DIM AS INTEGER zaehler = 0, i
DIM AS INTEGER b(1 TO 3) = { 900, 900, 900 } ' Breite der Ebenen
DIM AS SINGLE posX(1 TO 3) = { 0, 0, 0 } ' Position innerhalb der Ebenen
DIM AS INTEGER schnell(1 TO 3) = { 20, 100, 400 } ' Geschwindigkeit der Ebenen
DIM AS DOUBLE letzterZeitpunkt, zeitdifferenz
' Ebenen laden
FOR i = 1 TO 3
ebene(i) = IMAGECREATE(b(i) + bildbreite, bildhoehe)
BLOAD "ebene" & i & ".bmp", ebene(i)
' Stueck des linken Randes an den rechten Rand anhaengen
PUT ebene(i), (b(i),0), ebene(i), (0,0)-STEP(bildbreite-1,bildhoehe-1), PSET
NEXT
letzterZeitpunkt = TIMER
DO
' Schleifen-Durchlaufdauer berechnen
zeitdifferenz = TIMER - letzterZeitpunkt
letzterZeitpunkt = TIMER
' neue Position der Ebenen bestimmen
zaehler += 1
FOR i = 1 TO 3
posX(i) += zeitdifferenz*schnell(i)
' Wenn das Ende der Ebene erreicht ist, an den Anfang zurueckkehren
DO WHILE posX(i) > b(i) : posX(i) -= b(i) : LOOP
NEXT
' Ebenen zeichnen
SCREENLOCK
FOR i = 1 TO 3
PUT (0,0), ebene(i), (posX(i),0)-STEP(bildbreite-1,bildhoehe-1), TRANS
NEXT
LOCATE 1, 1 : PRINT "FPS: "; 1 / zeitdifferenz
SCREENUNLOCK
SLEEP 1 ' hier testweise andere Werte verwenden
LOOP UNTIL INKEY <> ""
' Speicher bereinigen
FOR i = 1 TO 3
IMAGEDESTROY ebene(i)
NEXT