SDL 2 Lektionen: Lektion 2 - Haupt ohne Gummi

Hallo allerseits! Dies ist meine zweite SDL 2-Lektion. Ich erhalte hier noch Informationen.

Willkommen zur Lektion

Haupt nicht Gummi


In der letzten Lektion habe ich alles in der Main () - Funktion gut angeordnet, aber für große Programme ist dies nicht gut. Deshalb bot sich die Möglichkeit, Funktionen zu schreiben. Jetzt werden wir es benutzen.

Wir beginnen mit dem Schreiben von Code, indem wir eine SDL verbinden und mehrere globale Variablen deklarieren.

#include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Surface *scr = NULL; SDL_Surface *smile = NULL; 

Hier haben wir außerhalb der Main () - Funktion Fensterobjekte ( win ), Bildschirmflächen ( scr ) und das Bild dieses Emoticon ( smile ) deklariert .

Schreiben wir eine Funktion zum Initialisieren der SDL, erstellen ein Fenster und eine Oberfläche zum Zeichnen. Es sieht so aus:

Init ()
 int init() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { return 1; } win = SDL_CreateWindow("Main  ", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { return 1; } scr = SDL_GetWindowSurface(win); return 0; } 

Dieser Code sollte Ihnen aus der vorherigen Lektion bekannt sein. Hier haben wir das Videosystem initialisiert, ein Fenster mit dem Namen „Main ist kein Gummi“ mit undefinierten Koordinaten und den zuvor festgelegten Abmessungen erstellt und auch die Oberfläche des Fensters erhalten und in scr gespeichert . Bei einem Fehler gibt diese Funktion 1 zurück, andernfalls 0.

Jetzt können Sie eine Funktion zum Herunterladen der erforderlichen Mediendateien schreiben. Da ist sie:

Laden ()
 int load() { smile = SDL_LoadBMP("smile.bmp"); if (smile == NULL) { return 1; } return 0; } 

Diese Funktion ist sehr einfach. Wir laden das .bmp-Image mit der Funktion SDL_LoadBMP . Diese Funktion nimmt den Pfad zur Bilddatei (vollständig oder relativ) und gibt ein Objekt der Klasse SDL_Surface zurück . Sie sollten auch die Richtigkeit der Ausführung überprüfen: Wenn beim Herunterladen Probleme aufgetreten sind (Datei nicht gefunden, Datei beschädigt ), gibt die Funktion SDL_LoadBMP NULL zurück .

Wir schreiben auch ein Programm, um die Bewerbung zu vervollständigen.

Beenden Sie ()
 void quit() { SDL_FreeSurface(smile); smile = NULL; SDL_DestroyWindow(win); SDL_Quit(); } 

Hier ist eine neue SDL_FreeSurface- Funktion erschienen, die einfach die Oberfläche reinigt. Nachdem wir das variable Lächeln auf NULL gesetzt haben . Alle anderen Funktionen wurden in der vorherigen Lektion besprochen.

Hier ist das Schreiben der Funktionen beendet und wir können mit Main () fortfahren.

Main ()
 int main (int argc, char ** args) { if (init() == 1) { return 1; } if (load() == 1) { return 1; } SDL_BlitSurface(smile, NULL, scr, NULL); SDL_UpdateWindowSurface(win); SDL_Delay(2000); quit(); return 0; }; 

Hier rufen wir zuerst die zuvor geschriebene Funktion init () auf , dann die Funktion load () , die wir auch zuvor geschrieben haben. Zeigen Sie als Nächstes Smile in Scr mit der Funktion SDL_BlitSurface an . Diese Funktion verwendet eine Fläche zum Zeichnen, ein Rechteck, das aus dieser Fläche ausgeschnitten werden soll (dies ist für die Animation erforderlich). Wenn nichts geschnitten werden muss, wird NULL übertragen, die Fläche, auf die das Rechteck gezeichnet wird, deren Koordinaten zum Zeichnen verwendet werden. Wenn die Koordinaten Null sind, übergeben wir NULL .

Es ist Zeit, über die Koordinaten zu sprechen. SDL verwendet ein anderes Koordinatensystem, nicht das, an das jeder gewöhnt ist. Hier befindet sich der Punkt mit den Koordinaten (0, 0) in der oberen linken Ecke. Dies ist beim Anzeigen wichtig, um unangenehme Situationen zu vermeiden.

Nun, das hat Spaß gemacht, wir machen weiter. Als nächstes aktualisieren wir das Fenster mit einer bereits bekannten Funktion, lassen das Programm 2 Sekunden lang einfrieren, rufen die von uns geschriebene Funktion quit () auf und beenden das Programm. Am Ausgang haben wir ein Programm, das 2 Sekunden lang ein kühles Lächeln zeigt. Der gesamte Code sieht folgendermaßen aus:

 #include <SDL2/SDL.h> const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; SDL_Window *win = NULL; SDL_Surface *scr = NULL; SDL_Surface *smile = NULL; int init() { if (SDL_Init(SDL_INIT_VIDEO) != 0) { return 1; } win = SDL_CreateWindow("Main  ", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN); if (win == NULL) { return 1; } scr = SDL_GetWindowSurface(win); return 0; } int load() { smile = SDL_LoadBMP("smile.bmp"); if (smile == NULL) { return 1; } return 0; } void quit() { SDL_FreeSurface(smile); SDL_DestroyWindow(win); SDL_Quit(); } int main (int argc, char ** args) { if (init() == 1) { return 1; } if (load() == 1) { return 1; } SDL_BlitSurface(smile, NULL, scr, NULL); SDL_UpdateWindowSurface(win); SDL_Delay(2000); quit(); return 0; }; 

Ich hoffe alles war klar. Viel Glück an alle!

<< Vorherige Lektion || Nächste Lektion >>

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


All Articles