Das erste SDL Programm wird ein sehr einfaches. Es geht hier hauptsächlich darum, einen ersten Einstieg in diese Bibliothek zu finden, und das Projekt überhaupt erstmal zum Starten zu bringen – das ist nämlich erfahrungsgemäß die erste große Hürde. Weitere Hinweise zum Arbeiten mit SDL und den jeweiligen Compilern findet ihr als Dokumentation in den SDL Developer Libraries, z.B. für Visual C++ in VisualC.html. Falls du dich nicht mit der SDL auskennst, solltest du dir die Zeit nehmen, und die gestellten Aufgaben behandeln. Andernfalls kannst du direkt mit dem nächsten Teil durchstarten.
Die SDL besteht aus mehreren Komponenten wie Video, Audio, …, die einzeln initialisiert werden müssen. Ebenso muss die Bibliothek beim Beenden deinitialisiert werden. Die SDL kümmert sich ausserdem um die Ereignisbehandlung (Tasten- oder Mausereignisse, etc.), so dass wir uns nicht um plattformspezifischen Code kümmern müssen.
Unser erstes Programm soll einen Grafikmodus initialisieren und sich nach Tastendruck beenden.
Datei /Main.cpp
[source:cpp]// Zunächst müssen wir den SDL Header einbinden, in dem alle SDL Funktionen und Konstanten deklariert sind
#include
// Hier definieren wir globale Variablen
// Für das erste kleine Beispiel benötigen wir lediglich einen Backbuffer
SDL_Surface* g_pBackBuffer = 0;
// Die main-Funktion ist der Haupteinsprungspunkt des Programmes
int main( int argc, char* argv[] )
{
// Die Video-Komponente der SDL initialisieren
// Gibt die Funktion einen Wert < 0 zurück, ist ein Fehler aufgetreten
if( SDL_Init( SDL_INIT_VIDEO ) < 0 )
{
return 0;
}
// In einen Videomodus schalten; SDL_SetVideoMode gibt bei Erfolg einen Zeiger auf den Backbuffer zurück
// Im Gegensatz zu anderen Surfaces muß dieses Surface nicht vom Entwickler freigegeben werden
g_pBackBuffer = SDL_SetVideoMode( 800, 600, 16, SDL_HWSURFACE | SDL_DOUBLEBUF );
if( 0 == g_pBackBuffer )
{
// Bereits initialisiertes SDL System deinitialisieren
SDL_Quit();
return 0;
}
// Wenn wir hier angekommen sind, ist das Fenster erstellt und einsatzbereit
// Diese Variable wird Informationen über die aufgetretenen Ereignisse speichern, die uns SDL_PollEvent mitteilt
SDL_Event clEvent;
// Hier beginnen wir die Hauptschleife des Programms ...
while( 1 )
{
// ... und die Schleife wird nur verlassen, wenn eine Taste gedrückt wurde
if( SDL_PollEvent( &clEvent ) && ( clEvent.type == SDL_KEYDOWN ) )
{
break;
}
}
// Das Programm soll beendet werden
// SDL deinitialisieren
SDL_Quit();
// Und Schluß
return 0;
}[/source]
Der Header SDL.h ist der Header, in dem die gesamten SDL-Funktionen, Typen und Konstanten deklariert sind, die alle mit SDL_ beginnen. Um eine detailierte Erklärung zu den einzelnen Befehlen und Parametern zu erhalten, besuche bitte das SDL Documentation Project aus den weiterführenden Links (unten).
Die main-Funktion dient dann als Haupteinsprungspunkt in das Programm. Hier wird bewusst keine plattformabhängige Funktion verwendet, wie z.B. die WinMain unter Windows, um den Quelltext ohne Änderungen unter jedem System compilieren zu können.
Die folgenden Schritte sind einfach: Es wird eine 800x600 Pixel große Fläche mit 16 Bit Farbtiefe angefordert, vorerst im Fenster. Diese Fläche (engl. Surface) soll Doublebuffering unterstützen und im Videospeicher liegen, was die Anzeige erheblich beschleunigt. Daraufhin beginnt die Hauptschleife, in der die SDL ständig die Betriebssystemnachrichten überprüft. Tritt die Nachricht SDL_KEYDOWN ein, verlassen wir die Endlosschleife mit break. Das angeforderte Surface wird wieder freigegeben, und die SDL Bibliothek deinitialisiert.
Das ist alles. Dank der SDL müssen sich Windows-Benutzer nicht mehr mit der Erstellung des Fensters oder eines Message-Handlers rumplagen. Die SDL reduziert die Arbeit auf das Wesentliche, was uns hier natürlich sehr gelegen kommt.
Hinweise
Bitte beachtet zu diesem Thema auch unbedingt die FAQ: http://www.libsdl.org/faq.phpWeiterführende Links
Hier gibt es eine umfangreiche Befehlsreferenz mit Kommentaren der Benutzer sowie Beispielprogramme.
dict.cc
dict.leo.org
Falls es mal mit den Englischkenntnissen hapert 😉Aufgaben