Hallo allerseits! Ich habe beschlossen, mir hier SDL 2 anzuschauen, fand aber auf Russisch nichts Sinnvolles. Ich beschloss, meine eigene zu schreiben und mich
von hier inspirieren zu lassen.
Ich werde die Installation von SDL 2 überspringen und sofort mit dem Schreiben von Programmen beginnen, also:
Dein erstes Fenster
Beginnen wir mit der Verbindung von SDL 2.
#include <SDL2/SDL.h>
Hier werden wir mehrere globale Variablen deklarieren.
const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480;
Öffnen Sie als Nächstes die vertraute Hauptfunktion für alle.
int main (int argc, char ** args) { if( SDL_Init( SDL_INIT_EVERYTHING ) != 0 ) { return 1; } SDL_Surface* screen_surface = NULL; SDL_Window* window = NULL;
Schauen wir uns den Code etwas genauer an. In der Regel werden Befehlszeilenparameter über die Befehlszeile akzeptiert. Sie müssen akzeptiert werden. Als nächstes initialisieren wir SDL 2 mit der Funktion
SDL_Init () . Wir haben
SDL_INIT_EVERYTHING übergeben , was bedeutet, dass wir alle SDL-Module (Video, Audio usw.) initialisieren. Es gibt noch ein paar Flags für SDL_Init:
FlaggenSDL_INIT_TIMER - Timer-Verbindung;
SDL_INIT_AUDIO - Audioverbindung;
SDL_INIT_VIDEO - Videoverbindung, Ereignisse werden automatisch verbunden;
SDL_INIT_JOYSTICK - Joystick-Steuerverbindung;
SDL_INIT_HAPTIC - taktiles Subsystem (ich weiß nicht, was es ist, um ehrlich zu sein);
SDL_INIT_GAMECONTROLER - verbindet die Steuerung, der Joystick wird automatisch verbunden;
SDL_INIT_EVENTS - aktiviert die Ereignisverarbeitung;
SDL_INIT_EVERYTHING - verbindet alles, was oben aufgeführt ist;
SDL_INIT_NOPARACHUTE - Kompatibilitätsprüfung.
Erstellen Sie als Nächstes ein Fenster mit der Funktion
SDL_CreateWindow () . Wenn etwas wie beabsichtigt schief gelaufen ist, geben Sie 1 zurück.
window = SDL_CreateWindow("Hello, SDL 2!",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SDL_SCREEN_WIDTH, SDL_SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (window == NULL) { return 1; }
Die Funktion
SDL_CreateWindow () akzeptiert den Fensternamen, die OX-Fensterposition, die OY-Fensterposition, die Fensterbreite, die Fensterhöhe und die Flags. Jetzt
umgehen wir das Flag
SDL_WINDOW_SHOWN .
Es gibt andere Flags zum Erstellen eines Fensters.
FlaggenSDL_WINDOW_FULLSCREEN - Öffnet ein Fenster im Vollbildmodus und ändert die Auflösung des Desktops.
SDL_WINDOW_FULLSCREEN_DESKTOP - Öffnet mit Erlaubnis dieses Desktops ein Fenster im Vollbildmodus.
SDL_WINDOW_OPENGL - ein Fenster mit Unterstützung für OpenGL;
SDL_WINDOW_HIDDEN - das Fenster ist ausgeblendet;
SDL_WINDOW_BORDERLESS - ein Fenster ohne Rahmen;
SDL_WINDOW_RESIZABLE - Sie können die Fenstergröße ändern.
SDL_WINDOW_MINIMIZED - das Fenster wird minimiert;
SDL_WINDOW_MAXIMIZED - das Fenster wird maximiert;
Wenn wir das Programm jetzt kompilieren und ausführen, sehen wir ein mit Weiß gefülltes 640x480-Fenster, das sich nach einem Moment schließt. Wunderbar! Um dieses Wunder ein wenig zu genießen, können wir
SDL_Delay (2000) schreiben. Das Programm friert 2 Sekunden lang ein.
Nur ein Fenster ist natürlich gut, aber es wäre noch cooler, darin zu zeichnen, okay? Erstellen Sie dazu eine Oberfläche, auf der wir alles zeichnen, denn direkt im Fenster ist das Zeichnen irgendwie hässlich oder so.
screen_surface = SDL_GetWindowSurface(window); SDL_FillRect(screen_surface, NULL, SDL_MapRGB(screen_surface->format, 0, 255, 0)); SDL_UpdateWindowSurface(window);
Zuerst erhalten wir die Fensteroberfläche mit der Funktion
SDL_GetWindowSurface () . Es wurde so gemacht, dass es nicht notwendig war, die Abmessungen der Oberfläche, ihr Format anzugeben, sondern sofort die fertige Oberfläche zu erhalten. Außerdem muss diese Oberfläche nicht im Fenster gezeichnet werden - sie erledigt alles selbst.
Dann verwenden wir
SDL_FillRect () , um unsere Oberfläche grün zu malen. Wir haben
SDL_MapRGB geschrieben und dem Programm
mitgeteilt , dass wir RGB (Rot, Grün, Blau) verwenden würden, um die Farbe
festzulegen .
Und am Ende sollten wir das Fenster mit der Funktion
SDL_UpdateWindowSurface () aktualisieren, damit es anzeigt, was wir ihm gesagt haben.
Zu diesem Zeitpunkt zeigt das Programm beim Starten ein mit hellgrüner Farbe gefülltes Fenster an, das nicht innerhalb von 2 Sekunden geschlossen wird.
Nach Abschluss des Programms müssen wir den RAM aus unnötigen Dateien löschen, das Fenster schließen, im Allgemeinen die korrekte Beendigung des Programms bestimmen. Dabei helfen uns speziell vorbereitete Funktionen.
SDL_DestroyWindow(window); SDL_Quit();
Die Funktion
SDL_DestroyWindow () schließt das Fenster und die Funktion
SDL_Quit () initialisiert alle Module, die zuvor mit der Funktion
SDL_Init () verbunden waren .
Nun, Lektion Nummer 1 ist zu Ende, ich hoffe, alles war klar. Hier ist der Code, den ich am Ende bekommen habe:
#include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; int main (int argc, char ** args) { if( SDL_Init( SDL_INIT_EVERYTHING ) != 0 ) { return 1; } SDL_Surface* screen_surface = NULL; SDL_Window* window = NULL; window = SDL_CreateWindow("Hello, SDL 2!",SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (window == NULL) { return 1; } screen_surface = SDL_GetWindowSurface(window); SDL_FillRect(screen_surface, NULL, SDL_MapRGB( screen_surface->format, 0, 255, 0)); SDL_UpdateWindowSurface(window); SDL_Delay(2000); SDL_DestroyWindow(window); SDL_Quit(); return 0; };
Viel Glück an alle!
Nächste Lektion
>>