SDL e C - Uma dupla sensacional

Neste artigo tentarei apresentar o uso simples da SDL com a linguagem C. Estarei mostrando alguns exemplos práticos para isso.

[ Hits: 58.713 ]

Por: André em 28/01/2011 | Blog: http://127.0.0.1


Conhecendo as primeiras funções



Antes de mais nada, vamos criar o arquivo.

touch SdlCode.c

E vamos abri-lo para edição:

vi SdlCode.c

Isso se você estiver usando o VI, é claro.

Primeiramente, vamos inserir duas linhas:

#include <stdio.h>
#include <SDL/SDL.h>

Nesta primeira linha, como vocês devem saber, estamos incluindo ao arquivo, a biblioteca padrão de I/O (entrada e saída) da linguagem C, nada novo. A novidade aí é a segunda linha, onde adicionamos a biblioteca do SDL ao nosso arquivo. Para usarmos as funções da SDL, precisaremos deste arquivo.

Logo após, vamos criar a nossa função principal, o main() e vamos criar um novo ponteiro para "tela":

int main()
{
   SDL_Surface* tela;

Essa "tela" irá representar a tela (screen) do nosso computador. Sempre que formos nos referir à "tela principal" e nosso programa, iremos usar a "superfície" tela.

Basicamente, o que vamos fazer agora é iniciar a SDL, para isso, usaremos a função: SDL_Init(), recebendo como parâmetro "SDL_INIT_EVERYTHING", então, vamos adicionar a linha:

SDL_Init( SDL_INIT_EVERYTHING );

Vamos agora definir as propriedades de nossa janela, vamos fazer uma janela com as propriedades:: 700x700x16 bits. Para isso utilizaremos a função SDL_SetVideoMode.

Antes de mais nada, vamos dizer que é a tela (aquela que declaramos anteriormente) a responsável pela janela:

tela = SDL_SetVideoMode();

Agora vamos definir as propriedades:

tela = SDL_SetVideoMode(700,700,16, SDL_SWSURFACE);

Vamos agora pausar a nossa janela por alguns segundos utilizando a função SDL_Delay(), o tempo nós passamos como parâmetro de função.

Lembra que inicializamos a SDL? Então, agora vamos finalizar o seu uso. Insira a linha:

SDL_Quit();

Pronto, agora vamos só terminar os detalhes:

return 0;
}

O código em si, ficará:

#include <stdio.h>
#include <SDL/SDL.h>

int main()
{
   SDL_Surface* tela;
  
   SDL_Init(SDL_INIT_EVERYTHING);
  
   tela = SDL_SetVideoMode(700,700,16, SDL_SWSURFACE);
  
   SDL_Delay(4000);
  
   SDL_Quit();
  
   return 0;
}

Salve e compile com o comando:

gcc SdlCode.c -o SdlCode -lSDL

Agora vamos executar:

./SdlCode

Como saída, vocês devem ter uma janela como essa:
Se tiverem, é porque deu tudo certo. :-)

Vamos ajustar mais algumas coisinhas na próxima página.

Página anterior     Próxima página

Páginas do artigo
   1. Introdução
   2. Preparando o ambiente
   3. Conhecendo as primeiras funções
   4. Realizando alguns ajustes
   5. Inserindo uma imagem
   6. Conclusão
Outros artigos deste autor

Programando em Perl (parte 2)

Introdução ao Fortran (parte 1)

L.F.A.Q : Linux Frequently Asked Questions

Introdução aos sistemas operacionais

Pentesting on PHP apps: XSS

Leitura recomendada

Programação com números inteiros gigantes

Alocação dinâmica

Algum humor e C++ Design Patterns (parte 1)

Bug afeta todas as distros

Mapear objetos em C

  
Comentários
[1] Comentário enviado por br_rafael em 30/01/2011 - 12:39h

#include <stdio.h>
#include <SDL/SDL.h>

int main(){
SDL_Surface* tela;
SDL_Init(SDL_INIT_EVERYTHING); // Iniciar o SDL
tela = SDL_SetVideoMode(640,480,16,SDL_SWSURFACE);
SDL_Delay(4000); // Esperar 4 segundos
SDL_Quit();
return 0;
}

Quando compilo aparece:

$ gcc -o teste-1-sdl teste-1-sdl.c
/tmp/cciduLoZ.o: In function `main':
teste-1-sdl.c:(.text+0xe): undefined reference to `SDL_Init'
teste-1-sdl.c:(.text+0x27): undefined reference to `SDL_SetVideoMode'
teste-1-sdl.c:(.text+0x35): undefined reference to `SDL_Delay'
teste-1-sdl.c:(.text+0x3a): undefined reference to `SDL_Quit'
collect2: ld returned 1 exit status


[2] Comentário enviado por br_rafael em 30/01/2011 - 12:43h

OK, eu tinha esquecido de colocar o "-lSDL" na hora de compilar.

[3] Comentário enviado por SamL em 30/01/2011 - 12:58h

Legal cara, nota 10. Se for escrever a parte 2 não hesite em pedir ajuda :)

[4] Comentário enviado por WhiteHawk em 30/01/2011 - 12:59h

Muito interessante este artigo. Uma coisa que eu não sabia era que o SDL também pode ser usado com Java.

[5] Comentário enviado por andrezc em 30/01/2011 - 13:06h

Pode deixar, Sam. Mais pra frente eu pretendo fazer a parte 2 sim. :D

[6] Comentário enviado por br_rafael em 30/01/2011 - 13:12h

Ficou uma sensação de quero mais...

Queria um "Parte 2" mostrando como fazer um personagem se movimentar de um lado a outro da tela (com as setas do teclado e o com o boneco em PNG mexendo as pernas).

[7] Comentário enviado por andrezc em 30/01/2011 - 13:20h

Oi, Rafael. Então, no próximo artigo eu estarei dando continuidade a manipulação de imagens na tela, mas se eu conseguir resumir bem, talvez dê para falar algo sobre eventos do teclado. Vou escrever a parte 2 sábado que vem.

[8] Comentário enviado por br_rafael em 30/01/2011 - 17:04h

Pra quem sabe ler inglês, esse tutorial é muito bom (estou lendo e praticando)
http://lazyfoo.net/SDL_tutorials/index.php

Esse artigo também é bom:
http://www.vivaolinux.com.br/artigo/SDL-Otimo-para-criacao-de-jogos

[9] Comentário enviado por andrezc em 30/01/2011 - 17:09h

A um tempo atrás o Sam L. havia me sugerido esse primeiro link. É sem dúvida alguma uma ótima referência. A melhor sobre SDL para C que já li.

[10] Comentário enviado por br_rafael em 30/01/2011 - 17:25h

andrezc, estarei aguardando ansiosamente pela "Parte 2". Eu pretendo trabalhar com jogos multiplataforma (Linux e Windows).

Quando eu ganhar R$ 1.000.000,00 com um jogo, estarei muito feliz ao ponto de liberar o código-fonte em licença GPL :) Tenho interesse em criar um jogo 2D de código-aberto para praticar minhas futuras habilidades. Quem souber SDL e C/C++ está convidado a participar. Programo em PHP desde de 2005, mas em C/C++ desde 2011 (não tenho nem 3 semanas de prática). O convite está ai, quem tiver interesse, entre contato comigo. Vamos aprender juntos? A ideia para o jogo eu já tenho.

Rafael A. de Almeida
rafael.kbps@gmail.com

[11] Comentário enviado por andrezc em 30/01/2011 - 17:53h

Mas você sabe que C e C++ são duas linguagem diferentes, não é ?! Não vou ajudar diretamente em seu projeto pois trabalho o dia inteiro e vou ao curso durante a noite, mas se tiver alguma dúvida e eu souber, eu respondo numa boa.

Boa sorte.

[12] Comentário enviado por br_rafael em 30/01/2011 - 18:11h

Sei que são diferentes, mas que sabe C pode aprender C++

[13] Comentário enviado por evamberto em 09/10/2011 - 19:43h

Quem quiser aprender mais sobre SDL olhe esse site show, http://lazyfoo.net/SDL_tutorials/ !!!!!!!

[14] Comentário enviado por evamberto em 09/10/2011 - 19:44h

parabéns pelo o artigo!!!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts