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