fb:porticula NoPaste
4.3: PUT mit Hintergrund-Speicherung
Uploader: | nemored |
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