Bonjour à tous! J'ai décidé de regarder SDL 2, mais je n'ai rien trouvé de sensé en russe. J'ai décidé d'écrire le mien, en m'inspirant
d'ici .
Je vais sauter l'installation de SDL 2, et je vais commencer tout de suite en écrivant des programmes, donc:
Votre premiĂšre fenĂȘtre
Commençons par connecter SDL 2.
#include <SDL2/SDL.h>
Ici, nous déclarerons plusieurs variables globales.
const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480;
Ensuite, ouvrez la fonction principale familiĂšre Ă tout le monde.
int main (int argc, char ** args) { if( SDL_Init( SDL_INIT_EVERYTHING ) != 0 ) { return 1; } SDL_Surface* screen_surface = NULL; SDL_Window* window = NULL;
Regardons un peu le code. En gĂ©nĂ©ral, les paramĂštres de ligne de commande sont acceptĂ©s Ă partir de la ligne de commande, ils doivent ĂȘtre acceptĂ©s. Ensuite, nous initialisons SDL 2 avec la fonction
SDL_Init () . Nous lui avons transmis
SDL_INIT_EVERYTHING , ce qui signifie que nous initialisons tous les modules SDL (vidéo, audio, etc.). Il existe quelques autres indicateurs pour SDL_Init:
DrapeauxSDL_INIT_TIMER - connexion temporisée;
SDL_INIT_AUDIO - connexion audio;
SDL_INIT_VIDEO - connexion vidéo, les événements sont automatiquement connectés;
SDL_INIT_JOYSTICK - connexion de commande du joystick;
SDL_INIT_HAPTIC - sous-systĂšme tactile (je ne sais pas ce que c'est, pour ĂȘtre honnĂȘte);
SDL_INIT_GAMECONTROLER - connecte le contrÎle, le joystick est automatiquement connecté;
SDL_INIT_EVENTS - active le traitement des événements;
SDL_INIT_EVERYTHING - connecte tout ce qui est indiqué ci-dessus;
SDL_INIT_NOPARACHUTE - vérification de compatibilité.
Ensuite, crĂ©ez une fenĂȘtre avec la fonction
SDL_CreateWindow () . Si quelque chose s'est mal passé, retournez 1.
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; }
La fonction
SDL_CreateWindow () accepte le nom de la fenĂȘtre, la position de la fenĂȘtre OX, la position de la fenĂȘtre OY, la largeur de la fenĂȘtre, la hauteur de la fenĂȘtre et les indicateurs. Nous allons maintenant contourner le drapeau
SDL_WINDOW_SHOWN .
Il existe d'autres indicateurs pour crĂ©er une fenĂȘtre.
DrapeauxSDL_WINDOW_FULLSCREEN - ouvre une fenĂȘtre en mode plein Ă©cran, change la rĂ©solution du bureau;
SDL_WINDOW_FULLSCREEN_DESKTOP - ouvre une fenĂȘtre en mode plein Ă©cran avec la permission de ce bureau;
SDL_WINDOW_OPENGL - une fenĂȘtre prenant en charge OpenGL;
SDL_WINDOW_HIDDEN - la fenĂȘtre est masquĂ©e;
SDL_WINDOW_BORDERLESS - une fenĂȘtre sans cadre;
SDL_WINDOW_RESIZABLE - vous pouvez redimensionner la fenĂȘtre;
SDL_WINDOW_MINIMIZED - la fenĂȘtre est rĂ©duite;
SDL_WINDOW_MAXIMIZED - la fenĂȘtre est agrandie ;
Si nous compilons et exĂ©cutons le programme maintenant, nous verrons une fenĂȘtre 640x480 remplie de blanc, qui se fermera aprĂšs un moment. Magnifique! Pour profiter un peu de ce miracle, nous pouvons Ă©crire
SDL_Delay (2000) . Cela fera geler le programme pendant 2 secondes.
Juste une fenĂȘtre, bien sĂ»r, c'est bien, mais il serait encore plus cool de la dessiner, non? Pour ce faire, crĂ©ez une surface sur laquelle nous allons tout dessiner, car directement dans la fenĂȘtre, le dessin est en quelque sorte moche ou quelque chose.
screen_surface = SDL_GetWindowSurface(window); SDL_FillRect(screen_surface, NULL, SDL_MapRGB(screen_surface->format, 0, 255, 0)); SDL_UpdateWindowSurface(window);
Nous obtenons d'abord la surface de la fenĂȘtre avec la fonction
SDL_GetWindowSurface () . Il a Ă©tĂ© fait de sorte qu'il n'Ă©tait pas nĂ©cessaire d'indiquer les dimensions de la surface, son format, mais d'obtenir immĂ©diatement la surface finie. De plus, cette surface n'a pas besoin d'ĂȘtre dessinĂ©e dans la fenĂȘtre - elle fera tout elle-mĂȘme.
Ensuite, nous utilisons
SDL_FillRect () pour peindre notre surface en vert. Nous avons écrit
SDL_MapRGB , indiquant au programme que nous utiliserions RGB (Red Green Blue) pour définir la couleur.
Et Ă la fin, nous devrions mettre Ă jour la fenĂȘtre avec la fonction
SDL_UpdateWindowSurface () afin qu'elle affiche ce que nous lui avons dit.
Ă ce stade, lorsque vous dĂ©marrez le programme affichera une fenĂȘtre remplie de couleur vert vif, qui ne se fermera pas dans les 2 secondes.
AprĂšs avoir terminĂ© le programme, nous devons effacer la RAM des fichiers inutiles, fermer la fenĂȘtre, en gĂ©nĂ©ral, dĂ©terminer la terminaison correcte du programme. En cela, des fonctions spĂ©cialement prĂ©parĂ©es nous aideront.
SDL_DestroyWindow(window); SDL_Quit();
La fonction
SDL_DestroyWindow () ferme la fenĂȘtre et la fonction
SDL_Quit () désinitialise tous les modules précédemment connectés à la fonction
SDL_Init () .
Eh bien, la leçon numéro 1 est terminée, j'espÚre que tout était clair. Voici le code que j'ai obtenu à la fin:
#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; };
Bonne chance Ă tous!
Prochaine leçon
>>