Lektionen zu SDL 2: Lektion 1 - Hallo, SDL 2

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:

Flaggen
SDL_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.

Flaggen
SDL_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 >>

Source: https://habr.com/ru/post/de453700/


All Articles