Você está na página 1de 6

11/11/2009

Introdução
• SDL ou Simple Direct Layer, foi criado por Sam
Lantinga em 1998. O SDL é uma biblioteca multimídia
escrita em C que cria uma camada de abstração
Mini-curso (vídeo, sons, eventos, API`s) que tornam a
programação multiplataforma inviável.
Introdução ao Desenvolvimento
de Jogos com C e SDL

Kleber de Oliveira Andrade


pdjkleber@gmail.com
2009 © Kleber de Oliveira Andrade

Introdução O que podemos fazer ?


• SDL é escrito em C mas trabalha com C++ nativamente e • Vídeo:
suporta várias outras linguagens como Ada, Eiffel, Java, Lua,
ML, PHP, Pike, Python e Ruby. – Ajustar os modos de tela em qualquer
profundidade de cor.
• Pode rodar em Linux, Windows, BeOS, MacOS, FreeBSD, – Escrever diretamente no framebuffer.
OpenBSD, Solaris, IRIX e QNX. Há também suporte não oficial – Criar superfícies com os atributos de cor ou
para Windows CE, AmigaOS, Dreamcast, Atari, NetBSD, AIX, transparências.
OSF/Tru64, RISC OS e SymbianOS.
– Utilizar acelerados gráficos para otimizar
Site: http://www.libsdl.org/ superfícies.
Tutoriais: http://lazyfoo.net/SDL_tutorials/index.php
Documentação: http://www.libsdl.org/archives/SDL-1.0-portuguese-intro.zip

2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

O que podemos fazer ? O que podemos fazer ?


• Eventos: • Áudio:
– Entrada pelo teclado – Usar softwares de mixagem personalizados.

– Entrada pelo mouse


– Controle de CD de áudio:

– Eventos da janela (minimizar, maximizar e fechar)


– Áudio funciona independentemente do
mecanismo de callback utilizado pelo usuário
– Eventos ficam em uma fila para serem tratados
pelo usuário.

2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

1
11/11/2009

O que podemos fazer ? Bibliotecas que extendem a SDL


• Instâncias: • SDL foi projetada para ser acoplada a diversas
– Semáforos binários para sincronização.
outras bibliotecas de outros diversos fins.
• Timers:
– Obtêm mislisegundos que passaram.
• Seguindo este pensamento, ela foi divida em
– Espera uma quantidade de milisegundos.
biblioteca principal (SDL) e bibliotecas
• Memória: extensivas (oficiais ou não). Desta forma é
– Detecta a ordenação da memória do sistema atual.
– Rotina para a rápida inversão de valores de dados.
possível escolher o nível de dependência com
– Lê e escreve dados de uma ordenação especifica. a SD.

2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

Bibliotecas que extendem a SDL Jogos feitos em SDL


• SDL – Biblioteca principal
– http://www.libsdl.org/download-1.2.php
• SDL_Image – Formatos de imagens
– http://www.libsdl.org/projects/SDL_image/
• SDL_Mixer – Áudio e mixagem
– http://www.libsdl.org/projects/SDL_mixer/ Wormux Neverwinter Nights Frozen Bubble 2
• SDL_Ttf – Fontes TrueType
• http://www.libsdl.org/projects/SDL_ttf/
• SDL_Net – Conexões Socket
– http://www.libsdl.org/projects/SDL_net/
• SDL_Gfx – Primitivas gráficas
– http://www.ferzkopp.net/joomla/content/view/19/14/
SuperTux The Battle for Wesnoth Project Starfighter

2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

Tempo Eventos
• SDL_GetTicks – Obtem o número de • SDL_PollEvent – Obtem um evento pendente
milisegundos desde a inicialização da SDL. de tratamento.

• SDL_Delay – Espera um determinado número • SDL_GetKeyState – Obtem um verto com uma


de milisegundos antes de retornar.
visão geral do estado atual do teclado.

• SDL_AddTimer – Adiciona um timer que irá


ligar uma chamada após o número • SDL_GetMouseState – Obtem o estado atual
especificado de milisegundos. do mouse.
2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

2
11/11/2009

Vídeo Vídeo
• SDL_GetVideoSurface – Retorna o ponteiro da • SDL_MapRGB – Mapeia uma cor RGB para um pixel no
superfície mostrada no vídeo formato da superfície.

• SDL_SetVideoMode – Configura o modo de vídeo com • SDL_MapRGBA – Mapeia uma cor RGBA para um pixel
no formato da superfície.
a largura, altura e profundidade de cor especificados.
• SDL_GetRGB – Obtem valores RGB de um pixel em um
• SDL_Flip – Troca de buffers. Atualiza a tela. formato específico.

• SDL_FillRect – Preenche um retângulo com uma cor. • SDL_GetRGBA – Obtem valores RGBA de um pixel em
um formato específico.

2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

Vídeo Vídeo
• SDL_LoadBMP – Carrega um arquivo bitmap • SDL_LockSurface – Abre superfície para acesso
diretamente para uma superfície. direto

• SDL_SaveBMP – Salva uma superfície para o • SDL_UnlockSurface – Fecha superfície para


formato bitmap. acesso direto.

• SDL_SetColorKey – Ajusta uma cor chave (cor de • SDL_FreeSurface – Deleta superfícies.


transparência).
• SDL_DisplayFormat – Converte uma superfície
• SDL_BlitSurface – Pinta uma superfície em outra. para o formato da tela.

2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

SDL_Image SDL_Ttf (Texto)


• IMG_Load – Carrega diversos formatos de • TTF_Init – Inicializa a biblioteca.
imagem para uma surperfície.
• TTF_Quit – Finaliza a biblioteca

SDL_Surface *IMG_Load(const char* file); • TTF_GetError – Retorna o erro ocorrido em


formato de texto.
• IMG_GetError – Retorna o erro ocorrido em • TT_CloseFont – Deleta uma fonte.
formato de texto.
• TTF_OpenFont – Carrega uma fonte truetype.
2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

3
11/11/2009

SDL_Ttf (Texto) SDL_mixer (Sons e músicas)


• TTF_RenderText_Solid – Renderiza em 8bits • Mix_OpenAudio – Inicializa a SDL_Mixer
de forma brusca. Usa color key.
• Mix_CloseAudio – Finaliza
• TTF_RenderText_Shaded – Renderiza em 8bits
de forma suave. Usa cor de fundo. • Mix_LoadWAV – Carrega um efeito sonoro.
Mix_Chunk *Mix_LoadWave(char *file);
• TTF_RenderText_Blended – Renderiza em
32bits de forma suave. Usa transparência. • Mix_FreeChunk – Deleta um efeito sonoro.

2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

SDL_mixer (Sons e músicas) Ciclo de um jogo


• Mix_FreeMusic – Deleta um fundo musical. Inicializar a biblioteca SDL
Carregar imagens, sons e fonts
• Mix_FadeOutMusic – Encerramento gradativo. Inicializar variáveis

Enquanto ( usuário não encerra o jogo)


• Mix_PlayChannel –Executa um efeito sonoro.

• Mix_LoadMUS – Carrega um fundo musical. Atualiza o jogo Desenha Troca buffer Aguarda tempo
Mix_Music *Mix_LoadMUS(const char *file);
Fim do enquanto
• Mix_PlayMusic – Executa um fundo musical.
Limpar memória
int Mix_PlayMusic(Mix_Music *musica, int loops);
Fechar aplicativo

2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

Frame Rate Tiles


• A maior preocupação • Imagens de um cenário, são divididas em
é a taxa de FPS.
pedaços de tamanhos iguais. Abaixo tiles de
• Limitando os FPS,
um jogo.
podemos criar um
jogo que não acelera
quando o PC tem
processamento
superior ao
esperado.

Tiles desenhado por Marcio Kassouf Crocomo


2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

4
11/11/2009

Bricks (Tilemap) Sprites


• Estruturas com imagens que: 01
2
• Estruturas que descrevem a disposição dos
– Permite o livre posicionamento na tela
tiles que compõe a layer. – Permite criar animações

Tilemap Resultado Final

Tiles

2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

Desafio Desafio
• Experimente criar seu jogo agora mesmo • Aula 1:
– PONG.
• ´ •

Imagens
Áudio
• Como é seu primeiro, procure por alo que não •

Teclado
Texto
tenha muita colisão, animação, lógica
complicada ou que exija busca combinatória. • Aula 2:
– PACMAN.
• Imagens
• Animações
• Um jogo de tabuleiro pode ser uma boa opção • Áudio
• Teclado
• Texto

2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

Criando um ambiente para desenvolver Jogos Criando um ambiente para desenvolver Jogos
• Para evitar diversas dores de cabeça, vamos criar • Fazendo o download da SDL
algumas pastas para organização.
– C:\Dev – 1. Entre no site da SDL, e na área Downloads da
– C:\Dev\Dlls barra da esquerda, clique em SDL1.2;
– C:\Dev\Libs – 2. Nos arquivos citados em Development Libraries,
– C:\Dev\Projects selecione o arquivo da SDL para mingw. Por
exemplo SDL-devel-1.2.12-mingw32.tag.gz;
• Adicionando um caminho ao path – 3. No seu diretório de jogos, crie uma pasta
– Adicione o caminho da pasta Dlls que criamos ao path chamada libs e lá descompacte o SDL.
– 4. Copie o arquivo sdl.dll da pasta bin para a sua
• Instale o Visual C++ 2008 Express Edition
pasta de dlls;
– http://www.microsoft.com/express/download/#webInstall
2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

5
11/11/2009

Criando um novo projeto Configurando o compilador


• Abra o Visual C++ 2008 Express Edition
• C/C++ (Adicionar os includes das bibliotecas)
• Clique em File  New  Project...
• Em Name, de o nome do seu projeto (SDL_Pong) – General: "C:\Dev\Libs\SDL\SDL_ttf-2.0.9\include";
"C:\Dev\Libs\SDL\SDL_mixer-1.2.8\include"; "C:\Dev\Libs\SDL\SDL_image-
1.2.7\include";"C:\Dev\Libs\SDL\SDL-1.2.13\include"

2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

Configurando o linker Adicionando as dependências


• Linker (Adicionar as libs das bibliotecas) • Linker
– General: "C:\Dev\Libs\SDL\SDL_ttf-2.0.9\lib"; – Input
"C:\Dev\Libs\SDL\SDL_mixer-1.2.8\lib"; "C:\Dev\Libs\SDL\SDL_image-
1.2.7\lib"; "C:\Dev\Libs\SDL\SDL-1.2.13\lib" • SDL.lib
• SDLmain.lib
• SDL_image.lib
• SDL_mixer.lib
• SDL_ttf.lib

2009 © Kleber de Oliveira Andrade 2009 © Kleber de Oliveira Andrade

Referências
• Blog Ponto V, http://vinigodoy.wordpress.com/, acessado em
junho de 2009.
• Lazy Foo, http://lazyfoo.net/SDL_tutorials/index.php,
acessado em junho de 2009.
• Portal C++ - Diogo_RBG, http://diogorbg.blogspot.com/,
acessado em junho de 2009.
• Unidev, http://www.unidev.com.br/phpbb3/portal.php,
acessado em junho de 2009.
• deWitters - Game Loop,
http://dewitters.koonsolo.com/gameloop.html, acessado em
junho de 2009.

2009 © Kleber de Oliveira Andrade

Você também pode gostar