Buchempfehlung
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
Windows-Programmierung. Das Entwicklerhandbuch zur WIN32-API
"Der" Petzold, das über 1000 Seiten starke Standardwerk zum Win32-API - besonders nützlich u. a. bei der GUI-Programmierung in FreeBASIC! [Mehr Infos...]
FreeBASIC-Chat
Es sind Benutzer im FreeBASIC-Chat online.
(Stand:  )
FreeBASIC bei Twitter
Twitter FreeBASIC-Nachrichten jetzt auch über Twitter erhalten. Follow us!

fb:porticula NoPaste

Info
Info / Hilfe
Liste
Übersicht / Liste
Neu
Datei hochladen
Suche
Quellcode suchen
Download
Dateidownload

12.1: Parallax Scrolling mit FPS-Messung

Uploader:Redakteurnemored
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