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.
Por: Hunz
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):
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:
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:
Para compilar:
$ gcc teste.c -o teste -lSDL
Vídeo e gráficos
Vamos falar primeiramente sobre o vídeo, praticamente é para isso que o SDL é usado. Todos os programas em SDL tem que usar essa função de qualquer maneira.
Aqui vai um exemplo com comentários:
Agora que iniciamos o vídeo, não queremos que a nossa janela fique vazia, né? Então vamos carregar um BMP e colocá-lo no vídeo usando uma função.
Manipulação de eventos do teclado
Abordarei apenas a manipulação de eventos do teclado, mas a biblioteca SDL suporta a manipulação de eventos do mouse e de joysticks.
Creio eu que é mais fácil ver um código bem comentado do que várias linhas sobre teoria. Segue um exemplo com comentários.
Simples, não? Aqui segue uma lista com todos eventos disponíveis no teclado (copiado do site SDLdoc):
Links
Site oficial do SDL:
* Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
SDL Library Documentation - Um pouco desatualizado, porém útil:
* Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Fonte: vivaoLinux
Postado Por: RedDeviL
Por: Hunz
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):
Código:
#include <SDL/SDL.h>
* 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:
Código:
SDL_Init( SDL_INIT_VIDEO );
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:
Código:
#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); }
$ gcc teste.c -o teste -lSDL
Vídeo e gráficos
Vamos falar primeiramente sobre o vídeo, praticamente é para isso que o SDL é usado. Todos os programas em SDL tem que usar essa função de qualquer maneira.
Aqui vai um exemplo com comentários:
Código:
/* Cria uma surface SDL */ SDL_Surface *screen; /* Inicia o vídeo */ if (SDL_Init(SDL_INIT_VIDEO) == -1) { printf("Impossível iniciar SDL %s",SDL_GetError()); exit(-1); } /* Usando esta função não precisamos usar a SDL_Quit antes de usar a função exit */* atexit(SDL_Quit); /* Aqui iremos iniciar o vídeo em resolução 640x480 com 16 bits-per- pixel, usando o Hardware */* screen = SDL_SetVideoMode(640, 480, 16, SDL_HWSURFACE); /* Caso ele não consiga usar este modo de vídeo */ if (screen == NULL) { printf("Impossível trocar modo de vídeo. %s", SDL_GetError()); exit(-1); }
Código:
void mostrar_bmp(char *arquivo) { SDL_Surface *imagem; /* Carrega o Bitmap na surface criada */ imagem = SDL_LoadBMP(arquivo); if (imagem == NULL) { printf("Impossível carregar o arquivo %s: %s", arquivo, SDL_GetError()); exit(-1); } /* Coloca a imagem na tela */ if (SDL_BlitSurface(imagem, NULL, screen, NULL) < 0) { printf("Erro no BlitSurface: %s", SDL_GetError()); exit(-1); } /* Atualiza toda a tela */ SDL_UpdateRect(screen, 0,0,0,0); /* Desaloca a imagem */ SDL_FreeSurface(imagem); }
Abordarei apenas a manipulação de eventos do teclado, mas a biblioteca SDL suporta a manipulação de eventos do mouse e de joysticks.
Creio eu que é mais fácil ver um código bem comentado do que várias linhas sobre teoria. Segue um exemplo com comentários.
Código:
* Cria um manipulador de eventos, usado tanto para teclado/*ouse/joystick */ SDL_Event event; /* Inicia SDL */ .... /* Muda o Vídeo */ .... /* Principal Loop do jogo */ while (1) { /* Se algum evento for registrado */ while (SDL_PollEvent(&event)) { /* Que tipo de evento foi registrado? */ switch (event.type) { /* Pressionou tecla */ case SDL_KEYDOWN: /* Qual tecla pressionada? */ switch (event.key.keysym.sym) { case SDLK_ESCAPE: printf("ESC pressionado.\n"); break; case SDLK_UP: printf("Seta para cima pressionada.\n"); break; case SDLK_a: printf("A pressionado.\n"); break; } } } }
Links
Site oficial do SDL:
* Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
SDL Library Documentation - Um pouco desatualizado, porém útil:
* Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Fonte: vivaoLinux
Postado Por: RedDeviL
Comment