SDL e programação de jogos parte 1
Neste post vc verá um pouco sobre programação de jogos com SDL2. SDL2 como começar programar jogos? Tudo que vc precisa saber no momento é que no SDL2 temos este código básico:
#include <SDL2/SDL.h>
#include <stdio.h>
int main() {
SDL_Init(SDL_INIT_VIDEO);
//resto do seu jogo aqui
SDL_Quit();
return 0;
}
SDL_Init(SDL_INIT_VIDEO);--inicializa o SDL com o subsistema de vídeo (parâmetro SDL_INIT_VIDEO)
SDL_Quit();--finaliza o SDL e libera a memória da lib. Deve ser chamada DEPOIS de fechar tudo do jogo.
O código acima não faz nada de muito útil, mas podemos melhorar, veja:
#include <SDL2/SDL.h>
#include <stdio.h>
int main() {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window * janela = SDL_CreateWindow("Janela de exemplo na posição inicial 100x100 com tamanho 640x480", 100,100,640,480, SDL_WINDOW_OPENGL);
SDL_Renderer * renderer = SDL_CreateRenderer(janela, -1, SDL_RENDERER_ACCELERATED);
//resto do seu jogo aqui
//abaixo faz paralisar o programa por 6000 milissegundos
SDL_Delay(6000);
//por fim libera memória
SDL_DestroyRenderer(renderer);
SDL_DestroyWindow(janela);
SDL_Quit();
return 0;
}
Salve o código como janela.c e compile com:gcc -o janela janela.c -lSDL2
Neste código, será mostrada uma janela que vai ficar na tela por 6000 milissegundos (o equivalente a 6 segundos) e ai ela vai fechar e enerrar o programa.
SDL_Window * janela = SDL_CreateWindow("Janela de exemplo na posição inicial 100x100 com tamanho 640x480", 100,100,640,480, SDL_WINDOW_OPENGL);--aqui o SDL_CreateWindow vai retornar um SDL_Window * que vai ser salvo na variável janela. Esta é nossa janela de jogo.
Observe que eu não coloquei pra verificar por erros de criação da janela e do renderer, mas se vc desejar, pode colocar um if abaixo do de cada SDL_Create verificando se o retorno do SDL_Create é nulo, se for nulo, deu erro na criação. Exemplo com janela:
SDL_Window * janela = SDL_CreateWindow("Janela de exemplo na posição inicial 100x100 com tamanho 640x480", 100,100,640,480, SDL_WINDOW_OPENGL);
if (janela == NULL) {
//SDL_GetError retorna o último erro definido pela chamada de SDL_CreateWindow
printf("Deu erro na criação da janela: erro %s\n", SDL_Geterror());
//encerra o main aqui mesmo com erro
return 1;
}
SDL_Renderer * renderer = SDL_CreateRenderer(janela, -1, SDL_RENDERER_ACCELERATED);--aqui SDL_CreateRenderer vai retornar um SDL_Renderer * e será salvo na variável renderer.
A variável janela e renderer serão usados para criar todo o jogo. O SDL2 suporta diversas janelas mas cada janela DEVE ter seu próprio renderer, ou seja, é uma limitação do SDL2!
Na linha onde está o "//resto do seu jogo aqui" ficará o código do jogo. É onde serão feitas as chamadas as funções de desenhar na janela. Por enquanto não tem nada ali.
Por fim, temos a chamada de função
SDL_Delay(6000).SDL_Delay apenas faz uma pausa de alguns milissegundos de acordo com o parâmetro passado pra ela.
Seguindo o código temos a SDL_DestroyRenderer e SDL_DestroyWindow que nada mais são que funções para liberar a memória do renderer e de nossa janela. Não importa a ordem de execução das funções, mas vc sempre deve executar tais funções para destruir o renderer/janela que vc criou antes!
E por fim temos o SDL_Quit que descarrega o SDL.
Veja na parte 2 como criar o loop principal do jogo e fazer mover um retângulo na janela.

Comentários
Postar um comentário