FreeBasic: Sprites
Was ist ein Sprite?
[Bearbeiten]Ein Sprite ist ein Bild das sich über den Bildschirm bewegt, also zum Beispiel die Spielfigur in einem 2D Spiel. Sprites werden nicht so oft benutzt in Freebasic, sind aber dennoch wichtig.
Wie erstell ich einen Sprite?
[Bearbeiten]Um einen Sprite zu erstellen und zu benutzen braucht man zuerst ein Image. Ein Image wird so angelegt:
dim image as any ptr
image = createimage(100,100,rgb(255,255,255))
Im Beispiel wird ein Image mit der Größe 100x100 und der Hintergrundfarbe weiß erstellt. Es ist wichtig, sehr wichtig, ein Image sobald es nicht mehr gebraucht wird wieder zu löschen. Der speicher für das Image wird nicht automatisch wieder freigegeben. Wenn man den Speicher nicht befreit treten Speicherlecks auf, was besonders auf Rechner mit wenig Ram (~512MB) schlecht ist. Warum das schlecht ist wird im Thema Pointer näher behandelt. So wird also ein Image angelegt und wieder befreit:
dim image as any ptr
image = createimage(100,100,rgb(255,255,255))
imagedestroy image
So, das Image ist da und was kann man jetzt damit tun? Aus dem Kapitel Dateien kennst du schon Put und Get. Mit diesen beiden kann man nicht nur in Dateien schreiben oder aus Dateien lesen, man kann auch Teile des Bildschirms in ein Image laden.
Put und Get
[Bearbeiten]Gerade wurde gesagt, dass man Put und Get auch für Sprites benutzen kann. Put kann nicht nur in eine Datei schreiben, sondern auch auf dem Bildschirm Images anezeigen. Get kann vom Bildschirm bestimmte Bereiche nehmen und in ein Image kopieren. Hier ein Beispiel
screen 19,32
dim image as any ptr
image = imagecreate(101,101,rgb(255,255,255))
circle (50,50),50,rgb(255,0,0)
get (0,0)-(100,100),image
put (100,100),image,pset
sleep
Bei einem einzelnen Kreis wie hier macht das nicht viel Sinn, aber bei vielen Formen oder gar Bildern macht das sehr wohl Sinn.
Ein Problem
[Bearbeiten]Bei einer Spielfigur die so über den Bildschirm bewegt wird erkennt man ein Problem: Wenn der Hintergrund nicht einfarbig ist, wie in Spielen üblich, zieht die Figur eine Spur hinter sich her. Es gibt zwei Lösungen:
- Man benutzt einen einfarbigen Hintergrund.
- Man speichert die stelle bevor die Spielfigur an sie kopiert wird und stellt sie danach wieder her.
Da letzteres meistens gewählt wird, muss man ein zweites Image für den Hintergrund anlegen. Bevor eine Figur an eine Stelle kopiert wird, wird der bisherige Inhalt dieser Stelle in das zweite Image geladen. Wenn die Figur sich wegbewegt wird der alte Hintergrund wieder eingesetzt.