Leçons sur SDL 2: Leçon 1 - Bonjour, SDL 2

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:

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

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

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


All Articles