SDL - Ótimo para criação de jogos
A biblioteca SDL foi criada para facilitar a criação de jogos em Linux, *BSD, MacOS, Win32 e BeOS. Por ser uma biblioteca multi-plataforma, você terá um único código de seu jogo para diferentes sistemas operacionais. Neste artigo abordarei o básico sobre o uso dessa poderosa biblioteca.
Inicializando o uso do SDL em seu código
Primeiramente temos que incluir a biblioteca em nosso código,
da seguinte maneira (todos os aplicativos SDL precisam dessa
linha):
#include <SDL/SDL.h>
SDL é composto de 8 subsistemas. Neste artigo abordaremos 3 deles, os quais eu julgo serem os principais para o desenvolvimento de um jogo de pequeno porte:
- Manipulação de eventos;
- Entrada/Saída de dados;
- Vídeo.
Cada um desses subsistemas é inicializado através da função SDL_Init, também pode ser usada a função SDL_InitSubSystem, mas a função SDL_Init tem que ser usada antes de qualquer outra função SDL e ela inicializa automaticamente alguns subsistemas, como Entrada/Saída de dados e Manipulação de eventos.
Para iniciar o subsistema de Vídeo e os outros subsistemas padrões, devemos usar a função:
SDL_Init( SDL_INIT_VIDEO );
A função SDL_Init é completada com a função SDL_Quit, que deve ser usada quando terminada o uso da biblioteca SDL, esta função fecha todos os subsistemas inicializados.
Já sabemos como iniciar e como finalizar o uso da biblioteca SDL, o que nos permite criar a aplicação mais básica em SDL, mas de qualquer modo, precisamos aprender a manipular erros. Muitas funções SDL retornam um valor e indicam onde a função teve sucesso e onde ela falhou. Por exemplo, SDL_Init retorna -1 caso não seja possível iniciar um subsistema. SDL possui uma função muito prática para saber no que ocorreu o erro, sempre após ocorrer algum erro este erro é armazenado e podemos recorrer a ele usando a função SDL_GetError. Sempre use isso com freqüência, creio que você não pode ter muito conhecimento sobre um erro sem usar essa função.
Agora que já sabemos o básico, vamos ao primeiro exemplo:
#include <SDL/SDL.h>
#include <stdio.h>
int main()
{
printf("Iniciando SDL...\n");
if ( SDL_Init(SDL_INIT_VIDEO) == -1) {
printf("Impossível iniciar SDL.. %s\n", GetError());
exit(-1);
}
printf("SDL iniciado...\n");
printf("Fechando SDL...\n");
SDL_Quit();
printf("Fechando o aplicativo...\n");
exit(0);
}
#include <stdio.h>
int main()
{
printf("Iniciando SDL...\n");
if ( SDL_Init(SDL_INIT_VIDEO) == -1) {
printf("Impossível iniciar SDL.. %s\n", GetError());
exit(-1);
}
printf("SDL iniciado...\n");
printf("Fechando SDL...\n");
SDL_Quit();
printf("Fechando o aplicativo...\n");
exit(0);
}
Para compilar:
$ gcc teste.c -o teste -lSDL
Excelente artigo. Acho que o SDL está para o Linux assim como o directX está para o Windows. É uma pena que não exista uma biblioteca compatível com o directX, isso facilitaria muito a portabilidade de aplicativos.
Não sei se você sabe me responder, mas é possível trabalhar com diversas "surfaces" com SDL, ou seja, utilizar o processo de blit em surfaces diferentes, para ganhar velocidade da mesma forma que se faz com o directX?
[]'s
Celso Goya
PS: Se aceita a sugestão, um tutorial sobre sprites e sdl cairía como uma luva. :-)