Lições sobre SDL 2: Lição 1 - Olá, SDL 2

Olá pessoal! Decidi analisar o SDL 2, mas não achei nada sensato em russo. Decidi escrever a minha, inspirando -me daqui .

Ignorarei a instalação do SDL 2 e começarei imediatamente escrevendo programas, portanto:

Sua primeira janela




Vamos começar conectando o SDL 2.

#include <SDL2/SDL.h> 

Aqui declararemos várias variáveis ​​globais.

 const int SCREEN_WIDTH = 640; const int SCREEN_HEIGHT = 480; 

Em seguida, abra a função 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; 

Vamos dar uma olhada no código um pouco. Em geral, os parâmetros da linha de comando são aceitos na linha de comando, eles devem ser aceitos. Em seguida, inicializamos o SDL 2 com a função SDL_Init () . Passamos o SDL_INIT_EVERYTHING para ele, o que significa que inicializamos todos os módulos SDL (vídeo, áudio etc.). Existem mais alguns sinalizadores para SDL_Init:

Bandeiras
SDL_INIT_TIMER - conexão do timer;
SDL_INIT_AUDIO - conexão de áudio;
SDL_INIT_VIDEO - conexão de vídeo, os eventos são conectados automaticamente;
SDL_INIT_JOYSTICK - conexão de controle do joystick;
SDL_INIT_HAPTIC - subsistema tátil (não sei o que é, para ser sincero);
SDL_INIT_GAMECONTROLER - conecta o controle, o joystick é conectado automaticamente;
SDL_INIT_EVENTS - permite o processamento de eventos;
SDL_INIT_EVERYTHING - conecta tudo listado acima;
SDL_INIT_NOPARACHUTE - verificação de compatibilidade.

Em seguida, crie uma janela com a função SDL_CreateWindow () . Se algo der errado como pretendido, retorne 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; } 

A função SDL_CreateWindow () aceita o nome da janela, posição da janela OX, posição da janela OY, largura da janela, altura da janela e sinalizadores. Agora contornaremos a bandeira SDL_WINDOW_SHOWN .

Existem outros sinalizadores para criar uma janela.

Bandeiras
SDL_WINDOW_FULLSCREEN - abre uma janela no modo de tela cheia, altera a resolução da área de trabalho;
SDL_WINDOW_FULLSCREEN_DESKTOP - abre uma janela no modo de tela cheia com a permissão desta área de trabalho;
SDL_WINDOW_OPENGL - uma janela com suporte para OpenGL;
SDL_WINDOW_HIDDEN - a janela está oculta;
SDL_WINDOW_BORDERLESS - uma janela sem moldura;
SDL_WINDOW_RESIZABLE - você pode redimensionar a janela;
SDL_WINDOW_MINIMIZED - a janela é minimizada;
SDL_WINDOW_MAXIMIZED - a janela é maximizada;

Se compilarmos e executarmos o programa agora, veremos uma janela de 640x480 preenchida com branco, que fecha após um momento. Maravilhoso! Para aproveitar um pouco esse milagre, podemos escrever SDL_Delay (2000) . Isso fará com que o programa congele por 2 segundos.

É claro que apenas uma janela é boa, mas seria ainda mais legal desenhar nela, certo? Para fazer isso, crie uma superfície na qual desenharemos tudo, porque diretamente na janela, o desenho é de alguma forma feio ou algo assim.

  screen_surface = SDL_GetWindowSurface(window); SDL_FillRect(screen_surface, NULL, SDL_MapRGB(screen_surface->format, 0, 255, 0)); SDL_UpdateWindowSurface(window); 

Primeiro, obtemos a superfície da janela com a função SDL_GetWindowSurface () . Foi feito para que não fosse necessário indicar as dimensões da superfície, seu formato, mas obter imediatamente a superfície final. Além disso, essa superfície não precisa ser desenhada na janela - ela fará tudo sozinha.

Em seguida, usamos SDL_FillRect () para pintar nossa superfície de verde. Escrevemos SDL_MapRGB , informando ao programa que usaríamos RGB (Red Green Blue) para definir a cor.

E, no final, devemos atualizar a janela com a função SDL_UpdateWindowSurface () para exibir o que dissemos a ele.

Nesta fase, quando você inicia, o programa exibirá uma janela cheia de cor verde brilhante, que não será fechada dentro de 2 segundos.

Depois de concluir o programa, precisamos limpar a RAM de arquivos desnecessários, fechar a janela, em geral, determinar a finalização correta do programa. Nisso, funções especialmente preparadas nos ajudarão.

  SDL_DestroyWindow(window); SDL_Quit(); 

A função SDL_DestroyWindow () fecha a janela e a função SDL_Quit () desinicializa todos os módulos conectados anteriormente com a função SDL_Init () .

Bem, a lição número 1 chegou ao fim, espero que tudo esteja claro. Aqui está o código que recebi no 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; }; 

Boa sorte a todos!

Próxima lição >>

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


All Articles