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.

[ Hits: 53.303 ]

Por: Hunz em 12/01/2005 | Blog: http://tnegri.com/


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);
}

Para compilar:

$ gcc teste.c -o teste -lSDL

    Próxima página

Páginas do artigo
   1. Inicializando o uso do SDL em seu código
   2. Vídeo e gráficos
   3. Manipulação de eventos do teclado
   4. Links
Outros artigos deste autor

Deixando o GNOME mais adequado às leis de Fitts

Sociedade, Software Livre e Linux

Leitura recomendada

Acessando a porta paralela via Linux

Desenvolvendo para microcontroladores em GNU/Linux

O Produtor e o Consumidor

GNA: um Coprocessador para Aceleração Neural

A duplicação do buffer de saída na chamada de sistema fork() do Linux

  
Comentários
[1] Comentário enviado por Oki em 13/01/2005 - 00:12h

hunz,

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. :-)

[2] Comentário enviado por birilo em 13/01/2005 - 08:26h

Como funciona o SDL? É pra usar junto com OpenGL ou funciona sozinho?

[3] Comentário enviado por alsimoes em 13/01/2005 - 08:34h

O DirectX é um pacote composto pelo DirectDraw e Direct3D, um para gráficos 2D e outro 3D respectivamente. A SDL seria o DirectDraw do Linux enquando o Direct3D o OpenGL.

[4] Comentário enviado por alsimoes em 13/01/2005 - 08:45h

Complementando o meu comentário enterior...

É possivel criar jogos 3D usando a SDL da mesma forma que é possível criar jogos 2D com OpenGL, porém eu acredito que a diferença é a performace.

O jogo Super Tux por exemplo, é um jogo 2D mas há a opção de se jogar com OpenGL porém neste cado é preciso ter uma placa aceleradora de vídeo.

Já Quake 2 para jogar com aceleração de vídeo é preciso ter uma placa 3D e usar a renderização por OpenGL, quem não tem placa 3D pode jogar utilizando rendereização por software que neste caso usa a SDL.

[5] Comentário enviado por alvinlee em 13/01/2005 - 16:26h

Tem uma falha na linha 9. Só tem GetError eo certo é SDL_GetError :) eu acho né :P

[6] Comentário enviado por alvinlee em 13/01/2005 - 16:30h

Com relação aos games...Eu tenho um AMD K6-2 500Mhz placa de video SIS530 8Mb( não suporta 3d ) e 192Mb de RAM. Como eu faço pra jogar games 3d? Como o quake por exemplo.

[7] Comentário enviado por jose_maria em 13/01/2005 - 20:54h

Fico muito feliz por você ter feito esse artigo Thiago Negri. Parabéns.
Eu acho que eu posso responder algumas perguntas.

O SDL é uma biblioteca que ajuda o desenvolvedor a mexer com recursos multimídias (imagens, sons), trabalhar com os dispositivos de E/S (joystick, teclado, mouse),manipular erros e eventos, criar janelas etc.

Por isso tudo o SDL é muito bom para jogos. E uma coisa muito interessante é que ele é multiplataforma. Você pode programar e compilar seus programas tanto no Windows quanto no Linux. Então você não é dependente de DirectX no Windows.


O OpenGL pode/deve ser usado junto com o SDL por uma questão de facilidade (o SDL cria a janela, te ajuda com o teclado, joystick). Então para simplificar: jogos 2D = SDL. jogos 3D = SDL+OpenGL.

Eu estou fazendo um joguinho 2D em C usando SDL e GTK. Vocês podem dar uma conferida no beta em http://batalhao.codigolivre.org.br .

Para quem quer aprender SDL tem dois bons caminhos:
1) O livro "Programing Linux Games" do San Lantiga que você pode baixar em http://www.overcode.net/~overcode/writing/plg/
2) Estudar o código fonte aberto e livre de outros jogos.

[8] Comentário enviado por jose_maria em 13/01/2005 - 21:32h

O link que eu passei não está mais funcionando então eu fiz um mirror:
http://alu.dc.ufc.br/~silveira/temp/linux_games_programming.pdf

[9] Comentário enviado por fernandoamador em 16/01/2005 - 05:31h

Bom.

[10] Comentário enviado por hunz em 16/01/2005 - 10:50h

Fala ai pessoal!
Tava na praia curtindo minhas férias, hehehe.
Agora ficarei feliz se puder ajudar vocês com as dúvidas. :)

Criei um jogo em 2D usando SDL. Na verdade o jogo era pra ser 3D, mas infelizmente eu tive que formatar meu HD e acabei perdendo todo o código fonte dele e decidi fazer ele em 2D primeiro. Não sei onde hospeda-lo, se alguém souber, porfavor me diga! :)

Abraços,
Fiquem com Deus.

[11] Comentário enviado por jose_maria em 16/01/2005 - 12:16h

Sem dúvida o melhor lugar é o codigolivre.org.br.
Eu tenho 3 projetos hospedados lá e não tenho do que reclamar.
Ele oferece suporte a CVS, Fórums, BugTracker, MySQL e várias outras coisas.
E também ofecerece espaço na WEB e acesso via ftp. Além disso um nome como seu_projeto.codigolivre.org.br. E tudo isso de graça (para projetos de software livre é claro :D).
Mas tem também o gna.org e sourceforge.net.

[12] Comentário enviado por redstyle em 26/04/2005 - 02:05h

Tentei pegar o exemplo e compilar mais na hora de usar o gcc ele retornou falando que não achou o arquivo ou diretório SDL/SDL.h

Eu tenho que instalar o SDL ou ele já vem pronto pra usar...como seria isso?

[]'s

[13] Comentário enviado por utikawa em 03/05/2005 - 19:34h

Olá redstyle...
Você tem que instalar o SDL. Mas tem que ser a versão de desenvolvimento.
Na realidade, todas as bibliotecas que você for usar tem que ser instaladas as versões de desenvolvimento. Ela normalmente tem o nome libxyz-dev, onde xyz é o nome da biblioteca em questão...
Espero ter ajudado!

[14] Comentário enviado por removido em 20/11/2005 - 16:47h

www.superdownloads.ubbi.com.br

Nesse site vc pode achar o SDL.

[15] Comentário enviado por viniciusmarcius em 15/05/2007 - 20:07h

Valeu mesmo cara, são pessoas como vc q fazem o linux ficar tam melhor do que o vcs sabem quem. Abraço cara.

[16] Comentário enviado por f_Candido em 05/01/2008 - 00:21h

Muito Bom o Artigo. Parabéns.

[17] Comentário enviado por felipemartinsss em 28/07/2009 - 00:29h

Legal o artigo.
Animei para desenvolver algum artigo/jogo com SDL depois de ter lido.

Abraço


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts