Hola a todos! Decidí mirar SDL 2, pero no encontré nada sensato en ruso. Decidí escribir el mío, comiendo inspiración
de aquí .
Omitiré la instalación de SDL 2 y comenzaré de inmediato escribiendo programas, así que:
Tu primera ventana
Comencemos conectando SDL 2.
#include <SDL2/SDL.h>
Aquí declararemos varias variables globales.
const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480;
A continuación, abra la función principal familiar para todos.
int main (int argc, char ** args) { if( SDL_Init( SDL_INIT_EVERYTHING ) != 0 ) { return 1; } SDL_Surface* screen_surface = NULL; SDL_Window* window = NULL;
Veamos un poco el código. En general, los parámetros de la línea de comando se aceptan desde la línea de comando, deben aceptarse. A continuación, inicializamos SDL 2 con la función
SDL_Init () . Le pasamos
SDL_INIT_EVERYTHING , lo que significa que inicializamos todos los módulos SDL (video, audio, etc.). Hay algunas banderas más para SDL_Init:
BanderasSDL_INIT_TIMER - conexión del temporizador;
SDL_INIT_AUDIO - conexión de audio;
SDL_INIT_VIDEO : conexión de video, los eventos se conectan automáticamente;
SDL_INIT_JOYSTICK - conexión de control de joystick;
SDL_INIT_HAPTIC - subsistema táctil (no sé qué es, para ser honesto);
SDL_INIT_GAMECONTROLER : conecta el control, el joystick se conecta automáticamente;
SDL_INIT_EVENTS : habilita el procesamiento de eventos;
SDL_INIT_EVERYTHING : conecta todo lo mencionado anteriormente;
SDL_INIT_NOPARACHUTE : comprobación de compatibilidad.
A continuación, cree una ventana con la función
SDL_CreateWindow () . Si algo salió mal según lo previsto, devuelva 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 función
SDL_CreateWindow () acepta el nombre de la ventana, la posición de la ventana OX, la posición de la ventana OY, el ancho de la ventana, la altura de la ventana y las banderas. Ahora vamos a sortear la bandera
SDL_WINDOW_SHOWN .
Hay otras banderas para crear una ventana.
BanderasSDL_WINDOW_FULLSCREEN : abre una ventana en modo de pantalla completa, cambia la resolución del escritorio;
SDL_WINDOW_FULLSCREEN_DESKTOP : abre una ventana en modo de pantalla completa con el permiso de este escritorio;
SDL_WINDOW_OPENGL : una ventana con soporte para OpenGL;
SDL_WINDOW_HIDDEN : la ventana está oculta;
SDL_WINDOW_BORDERLESS : una ventana sin marco;
SDL_WINDOW_RESIZABLE : puede cambiar el tamaño de la ventana;
SDL_WINDOW_MINIMIZED : la ventana está minimizada;
SDL_WINDOW_MAXIMIZED : la ventana está maximizada;
Si compilamos y ejecutamos el programa ahora, veremos una ventana de 640x480 llena de blanco, que se cierra después de un momento. Maravilloso! Para disfrutar un poco este milagro, podemos escribir
SDL_Delay (2000) . Hará que el programa se congele durante 2 segundos.
Solo una ventana es, por supuesto, buena, pero sería aún más genial dibujarla, ¿verdad? Para hacer esto, cree una superficie en la que dibujaremos todo, porque directamente en la ventana, el dibujo es de alguna manera feo o algo así.
screen_surface = SDL_GetWindowSurface(window); SDL_FillRect(screen_surface, NULL, SDL_MapRGB(screen_surface->format, 0, 255, 0)); SDL_UpdateWindowSurface(window);
Primero obtenemos la superficie de la ventana con la función
SDL_GetWindowSurface () . Fue hecho de manera que no era necesario indicar las dimensiones de la superficie, su formato, sino obtener inmediatamente la superficie terminada. Además, esta superficie no necesita dibujarse en la ventana; hará todo por sí misma.
Luego usamos
SDL_FillRect () para pintar nuestra superficie de verde. Escribimos
SDL_MapRGB , diciéndole al programa que
usaríamos RGB (Rojo Verde Azul) para establecer el color.
Y al final, debemos actualizar la ventana con la función
SDL_UpdateWindowSurface () para que muestre lo que le dijimos.
En esta etapa, cuando inicie el programa, se mostrará una ventana llena de color verde brillante, que no se cerrará en 2 segundos.
Después de completar el programa, necesitamos borrar la RAM de los archivos innecesarios, cerrar la ventana, en general, determinar la terminación correcta del programa. En esto, las funciones especialmente preparadas nos ayudarán.
SDL_DestroyWindow(window); SDL_Quit();
La función
SDL_DestroyWindow () cierra la ventana, y la función
SDL_Quit () desinicializa todos los módulos previamente conectados con la función
SDL_Init () .
Bueno, la lección número 1 ha llegado a su fin, espero que todo esté claro. Aquí está el código que obtuve al final:
#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; };
¡Buena suerte a todos!
Próxima lección
>>