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

Postagens mais visitadas deste blog

SDL e programação de jogos - detecção de colisão - parte 3

SDL e programação de jogos parte 2