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

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

Operadores com a linguagem C

Acessando o Linux via SSH através do Android

Trabalhando com Java e SQL (parte 1)

Instalando e utilizando o LimeWire no Debian

Trabalhando com classes e métodos em Java

Leitura recomendada

Tutorial OpenGL v3.0

Ponteiros - Saindo de Pesadelos

Programação com números inteiros gigantes

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

Desenvolvendo para microcontroladores em GNU/Linux

  
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