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: 48.279 ]

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


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:

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

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.

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);
}
Página anterior     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

Utilizando técnicas recursivas em C e C++

Ponteiros - Saindo de Pesadelos

Desenvolvendo para microcontroladores em GNU/Linux

Cuidado com números em Ponto Flutuante

Instalando Facebook Folly através do Conan

  
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
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts