Bonjour à tous! Ceci est ma deuxième leçon SDL 2. Je reçois toujours des informations
d'ici .
Alors, bienvenue à la leçon
Principal pas en caoutchouc
Dans la dernière leçon, j'ai bien arrangé tout dans la fonction
Main () , mais pour les gros programmes, ce n'est pas bon. C'est pourquoi l'opportunité d'écrire des fonctions est apparue. Maintenant, nous allons l'utiliser.
Nous allons commencer à écrire du code en connectant un SDL et en déclarant plusieurs variables globales.
#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;
Ici, en dehors de la fonction
Main () , nous avons déclaré les objets de fenêtre (
win ), les surfaces d'écran (
scr ) et l'image de cette
émoticône (
sourire ).
Écrivons une fonction pour initialiser le SDL, créons une fenêtre et une surface pour le dessin. Cela ressemble à ceci:
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; }
Ce code devrait vous être familier de la leçon précédente. Ici, nous avons initialisé le système vidéo, créé une fenêtre avec le nom «Main n'est pas en caoutchouc», avec des coordonnées non définies et avec les dimensions précédemment définies, et avons également obtenu la surface de la fenêtre, en l'enregistrant dans
scr . En cas d'erreur, cette fonction renverra 1, sinon 0.
Vous pouvez maintenant écrire une fonction pour télécharger les fichiers multimédias nécessaires. Le voici:
Charge () int load() { smile = SDL_LoadBMP("smile.bmp"); if (smile == NULL) { return 1; } return 0; }
Cette fonction est extrêmement simple. Nous chargeons l'image .bmp à l'aide de la fonction
SDL_LoadBMP . Cette fonction prend le chemin du fichier image (complet ou relatif) et retourne un objet de la classe
SDL_Surface . Vous devez également vérifier l'exactitude de l'exécution: s'il y a eu des problèmes avec le téléchargement (fichier introuvable, fichier cassé), la fonction
SDL_LoadBMP renverra
NULL .
Nous écrivons également un programme pour compléter la demande.
Quitter () void quit() { SDL_FreeSurface(smile); smile = NULL; SDL_DestroyWindow(win); SDL_Quit(); }
Une nouvelle fonction
SDL_FreeSurface est apparue
ici , qui nettoie simplement la surface. Après avoir défini la variable
smile sur
NULL . Toutes les autres fonctions ont été discutées dans la leçon précédente.
C’est là que l’écriture des fonctions est terminée et nous pouvons passer à
Main () .
Principal () 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; };
Ici, nous appelons d'abord la fonction
init () , écrite plus tôt, puis la fonction
load () , que nous avons également écrite auparavant. Ensuite, affichez
smile in
scr , en utilisant la fonction
SDL_BlitSurface . Cette fonction prend une surface pour le dessin, un rectangle qui doit être coupé de cette surface (cela est nécessaire pour l'animation), si rien n'a besoin d'être coupé,
NULL est transmis, la surface sur laquelle le rectangle est dessiné, dont les coordonnées sont utilisées pour le dessin. Si les coordonnées sont nulles, nous passons
NULL .
Il est temps de parler des coordonnées. SDL utilise un système de coordonnées différent, pas celui auquel tout le monde est habitué. Ici, le point avec les coordonnées (0, 0) est dans le coin supérieur gauche. Ceci est important à considérer lors de l'affichage pour éviter les situations désagréables.
Eh bien, c'était amusant, nous continuons. Ensuite, nous mettons à jour la fenêtre avec une fonction déjà familière, faisons figer le programme pendant 2 secondes, appelons la fonction
quit () que nous avons écrite et terminons le programme. À la sortie, nous avons un programme qui affiche un sourire cool pendant 2 secondes. Le code entier ressemble à ceci:
#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; };
J'espère que tout était clair. Bonne chance à tous!
<< Leçon précédente || Prochaine leçon
>>