Tutorial
SDL Einführung (Simple Grafik)
von psygate | Seite 1 von 1 |
Einführung
SDL ist eine Library die recht einfach und schnell zu erlernen ist. SDL steht für Simple DirectMedia Layer. SDL verwaltet für einen Eingabegeräte (Maus, Tastatur), Grafik und Sound. Damit nimmt sie dem Programmierer einiges an Arbeit ab. SDL ist Event-Driven und deshalb recht einfach zu handhaben. Unter anderem wurde die Library geschrieben, um gerade Anfängern den Einstieg leicht zu machen. Gerade wenn man anfangs auch mit Hardwarebeschleunigung arbeiten will, eigent sich SDL sehr, um so etwas zu realisieren. Genug geredet. Ab ins Vergnügen!
Freebasic & SDL
SDL stellt einem alles was man braucht zur Verfügung. Freebasic sagt man, dass es SDL verwenden soll, indem man einfach
#include "SDL\SDL.bi"
an den Anfang seines Codes setzt. Als nächstes initialisiert man einen Screenpointer. Dieser zeigt später auf den Speicherbereich, in dem unsere "Grafik" liegt. Mit
dim video as SDL_Surface ptr
ist das gleich erledigt. Weil SDL alles verwaltet, brauchen wir noch einen sogenannten "Event", um Tastaturanschläge abfangen zu können.
dim event as SDL_EVENT
. Jetzt muss SDL nur noch den Grafikspeicher für uns reservieren und schon haben wir unser Fenster.
So, einmal alles im ganzen Stück zusammengefasst:
#include "SDL\SDL.bi" 'SDL inkludieren.
#define xmax 640 'Fensterweite
#define ymax 480 'Fensterhöhe
dim shared video as SDL_Surface PTR 'Pointer auf den späteren Fensterpuffer.
dim shared event as SDL_Event 'Event zum Abfangen von Tastenanschlägen.
'Einmal ein Fenster der größe 640x480 mit 32bit Farbtiefe
'SDL_HWSURFACE = Im Grafikspeicher (Grafikkarte / Reservierter RAM in manchen Laptops)
'SDL_DOUBLEBUF = Mit 2 Pages, damit das Zeichnen nicht so hässlich aussieht
'SDL HWACCELL = Und Hardwarebeschleunigt
video = SDL_SetVideoMode(xmax,ymax,32, SDL_HWSURFACE or SDL_DOUBLEBUF or SDL_HWACCEL)
'Unter Freebasic entspräche das ungefähr screenres 640,480,32,2
'SDL_HWACCEL und SDL_HWSURFACE haben keine wirkliche Entsprechung.
while 1
SDL_PollEvent(@event) 'Falls ein Event geschehen ist (Taste gedrückt?) bitte in event speichern.
select case event.type 'Event ist ein zusammengesetzter Datentyp und hat von SDL aus schon einen Typen (Maus, Tastatur usw)
case SDL_KEYDOWN: 'Falls eine Taste gedrückt wurde, Programm beenden.
SDL_QUIT() 'SDL beenden und Fenster schließen.
end
end select
'Hier könnte jetzt der Code für Grafik usw. stehen
wend
Und schon haben wir ein einfaches Fenster aufgerufen und können eigentlich loslegen. Zum Beispiel ein Sprite laden und anzeigen. Dazu müssen wir wieder mit
dim sprite as SDL_SURFACE ptr
einen Pointer auf unseren späteren Speicherplatz erzeugen und dann können wir direkt mit der SDL Funktion IMG_LOAD(file) eine Bilddatei laden.
sprite = IMG_LOAD("avatar.png")
und schon haben wir unseren Avatar geladen.
Der folgende Code läd ein avatar.png und zeigt es dann, wartet auf eine Tastatureingabe und beendet dann:
#include "SDL\SDL.bi" 'SDL inkludieren.
#define xmax 640 'Fensterweite
#define ymax 480 'Fensterhöhe
dim shared video as SDL_Surface PTR 'Pointer auf den späteren Fensterpuffer.
dim shared event as SDL_Event 'Event zum Abfangen von Tastenanschlägen.
'Einmal ein Fenster der größe 640x480 mit 32bit Farbtiefe
'SDL_HWSURFACE = Im Grafikspeicher (Grafikkarte / Reservierter RAM in manchen Laptops)
'SDL_DOUBLEBUF = Mit 2 Pages, damit das Zeichnen nicht so hässlich aussieht
'SDL HWACCELL = Und Hardwarebeschleunigt
video = SDL_SetVideoMode(xmax,ymax,32, SDL_HWSURFACE or SDL_DOUBLEBUF or SDL_HWACCEL)
'Unter Freebasic entspräche das ungefähr screenres 640,480,32,2
'SDL_HWACCEL und SDL_HWSURFACE haben keine wirkliche Entsprechung.
''Ein Bild wie einen Avatar könnte man nun einfach mit
'IMG_Load laden.
''Code dafür wäre:
dim avatar as SDL_SURFACE ptr
avatar = IMG_load("avatar.png")
''Gezeichnet kann das Ganze dann mit SDL_BlitSurface(start,startkoordinaten,Ziel, Zielkoordinaten) werden.
SDL_BlitSurface(avatar,NULL,video,NULL)
''Und angezeigt wird das Ganze letzendlich mit
SDL_Flip(video)
''und wenn man das Bild nicht mehr braucht, einfach mit
SDL_FreeSurface(avatar)
''den Speicher freigeben.
while 1
SDL_PollEvent(@event) 'Falls ein Event geschehen ist (Taste gedrückt?) bitte in event speichern.
select case event.type 'Event ist ein zusammengesetzter Datentyp und hat von SDL aus schon einen Typen (Maus, Tastatur usw)
case SDL_KEYDOWN: 'Falls eine Taste gedrückt wurde, Programm beenden.
SDL_QUIT() 'SDL beenden und Fenster schließen.
end
end select
wend
So, das wars auch schon wieder mit den Grundlagen.
Zusätzliche Informationen und Funktionen | |||||||
---|---|---|---|---|---|---|---|
|