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

4.3: PUT mit Hintergrund-Speicherung

Uploader:Redakteurnemored
Datum/Zeit:24.09.2011 12:09:28
Hinweis: Dieser Quelltext ist Bestandteil des Projekts OpenBook: 2D-Spieleprogrammierung, zu dem es auf FreeBASIC-Portal.de eine Projektseite gibt.

' *** CODE 4.3: PUT mit Hintergrund-Speicherung

#DEFINE PI 3.141592653589793
SCREENRES 300, 200, 32                     ' Grafikscreen mit 32bit Farbtiefe
DIM AS ANY PTR bild, hg
DIM AS UINTEGER hell = RGB(255, 64, 64)    ' heller Farbwert des Steins
DIM AS UINTEGER dunkel = RGB(192, 0, 0)    ' dunkler Farbwert des Steins

' Bild in den Puffer schreiben
bild = IMAGECREATE(40, 40)
hg = IMAGECREATE(40, 40)
CIRCLE bild, (20, 25), 15, dunkel, PI, 0, .6
LINE bild, (5, 20)-step (0, 5), dunkel
LINE bild, (35, 20)-step (0, 5), dunkel
CIRCLE bild, (20, 20), 15, dunkel, , , .6
PAINT bild, (20, 30), dunkel, dunkel
PAINT bild, (20, 20), hell, dunkel

' Hintergrund erstellen
LINE (50, 50)-(250, 150), RGB(0,255,0), BF ' gruenes Rechteck ...
LINE (80, 80)-(220, 120), RGB(0,0,255), BF ' ... und darin ein blaues

DIM AS INTEGER mausX = 0, mausY = 0, mausB ' Mausposition und Buttonstatus
DIM AS INTEGER altX = 0, altY = 0          ' zuletzt gemerkte Mausposition
SETMOUSE mausX, mausY, 0, 1                ' Maus auf das Fenster beschraenken
GET (altX, altY)-step(39, 39), hg          ' Hintergrund speichern
PUT (mausX, mausY), bild, TRANS
DO
  GETMOUSE mausX, mausY, , mausB           ' neue Position ermitteln ...
  IF mausX > 260 THEN mausX = 260          ' ... und an den Grenzen anpassen
  IF mausy > 160 THEN mausY = 160
  IF mausX <> altX OR mausY <> altY THEN   ' Maus wurde bewegt
    SCREENLOCK
    PUT (altX, altY), hg, PSET             ' alte Position wiederherstellen
    GET (mausX, mausY)-step(39, 39), hg    ' Hintergrund speichern
    PUT (mausX, mausY), bild, TRANS        ' neue Position zeichnen
    SCREENUNLOCK
    altX = mausX                           ' neue Position merken
    altY = mausY
  END IF
  SLEEP 1
LOOP UNTIL mausB > 0 OR INKEY = CHR(27)    ' bei Mausklick oder ESC beenden
IMAGEDESTROY bild                          ' Bildpuffer freigeben
IMAGEDESTROY hg