Hola a todos! Esta es mi segunda lección de SDL 2. Todavía obtengo información
de aquí .
Bienvenidos a la lección.
Principal no de goma
En la última lección, organicé todo en la función
Main () , pero para programas grandes esto no es bueno. Por eso apareció la oportunidad de escribir funciones. Ahora lo usaremos.
Comenzaremos a escribir código conectando un SDL y declarando varias 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;
Aquí, fuera de la función
Main () , declaramos objetos de ventana (
win ), superficies de pantalla (
scr ) y la imagen de este
emoticon (
smile ).
Escribamos una función para inicializar el SDL, cree una ventana y una superficie para dibujar. Se ve así:
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; }
Este código le resultará familiar de la lección anterior. Aquí inicializamos el sistema de video, creamos una ventana con el nombre “Main is not rubber”, con coordenadas indefinidas y con las dimensiones previamente establecidas, y también obtuvimos la superficie de la ventana, guardándola en
scr . En caso de error, esta función devolverá 1, de lo contrario 0.
Ahora puede escribir una función para descargar los archivos multimedia necesarios. Aquí esta:
Carga () int load() { smile = SDL_LoadBMP("smile.bmp"); if (smile == NULL) { return 1; } return 0; }
Esta función es extremadamente simple.
Cargamos la imagen .bmp usando la función
SDL_LoadBMP . Esta función toma la ruta al archivo de imagen (completo o relativo) y devuelve un objeto de la clase
SDL_Surface . También debe verificar la corrección de la ejecución: si hubo problemas con la descarga (archivo no encontrado, archivo roto), la función
SDL_LoadBMP devolverá
NULL .
También escribimos un programa para completar la solicitud.
Salir () void quit() { SDL_FreeSurface(smile); smile = NULL; SDL_DestroyWindow(win); SDL_Quit(); }
Aquí apareció una nueva función
SDL_FreeSurface , que simplemente limpia la superficie. Después de configurar la
sonrisa variable a
NULL . Todas las demás funciones se discutieron en la lección anterior.
Ahí es donde termina la escritura de las funciones y podemos pasar a
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; };
Aquí llamamos primero a la función
init () , escrita anteriormente, luego a la función
load () , que también escribimos antes. A continuación, muestre
smile in
scr , utilizando la función
SDL_BlitSurface . Esta función toma una superficie para dibujar, un rectángulo que se debe cortar de esta superficie (esto es necesario para la animación), si no se necesita cortar nada, se transmite
NULL , la superficie en la que se dibuja el rectángulo, cuyas coordenadas se usan para dibujar. Si las coordenadas son cero, pasamos
NULL .
Es hora de hablar sobre las coordenadas. SDL utiliza un sistema de coordenadas diferente, no al que todos están acostumbrados. Aquí el punto con coordenadas (0, 0) está en la esquina superior izquierda. Es importante tener esto en cuenta al mostrar para evitar situaciones desagradables.
Bueno, eso fue divertido, continuamos. A continuación, actualizamos la ventana con una función ya familiar, hacemos que el programa se congele durante 2 segundos, llame a la función
quit () que escribimos y finalice el programa. En la salida, tenemos un programa que muestra una sonrisa genial durante 2 segundos. Todo el código se ve así:
#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; };
Espero que todo esté claro. ¡Buena suerte a todos!
<< Lección anterior || Próxima lección
>>