Funcionamento
Como funciona?
A função initSDL()
inicializa as bibliotecas SDL, SDL_ttf (permite carregar fontes e escrever texto na tela) e SDL_image (permite carregar diversos formatos de imagem). Além disso, ela também cria a janela do programa.
A função gameLoop()
chama a função init()
e então entra em um loop, no qual chama repetidamente as funções processEvent()
, update()
e draw()
, várias vezes por segundo. Se alguma dessas funções chamar endGameLoop()
, o loop se encerra e a função destroy()
é chamada.
Informações adicionais:
init()
: chamada no início da execução do programa; aqui você deve carregar arquivos (imagens, fontes, áudio), inicializar variáveis etc.destroy()
: chamada no final da execução do programa; aqui você deve liberar os recursos, usando funções comoSDL_FreeSurface()
,TTF_CloseFont()
, dentre outras.- loop (executado várias vezes por segundo):
processEvent()
: aqui você deve tratar os eventos do SDL, como pressionar um botão, fechar janela, dentre outros; essa função pode ser chamada várias vezes dentro de uma iteração do loop.update()
: aqui você deve atualizar a sua simulação, alterando variáveis como posições de imagens, velocidades, dentre outros; aqui também pode ser útil ler o estado de teclas e do mouse, usando funções comoSDL_GetKeyboardState()
eSDL_GetMouseState()
.draw()
: aqui você vai desenhar coisas na tela; note que a funçãogameLoop()
limpa a tela antes de chamardraw()
, de forma que você precisa redesenhar tudo a cada vez.
Funções: Guia de Referência
- Inicialização
initSDL(w, h)
: inicializa SDL e bibliotecas relacionadas, e cria janela com larguraw
e alturah
. Sew
eh
forem omitidos, considera 800x600.
- Carregamento de arquivos
loadImage(filename)
: carrega o arquivo de imagemfilename
e retorna umSDL_Surface*
representando a imagem. Ex.:SDL_Surface *img = loadImage("hello.bmp")
. Ao final, a imagem deve ser liberada comSDL_FreeSurface(img)
.loadFont(filename, size)
: carrega o arquivo de fontefilename
com tamanho desize
pontos. Ex.:TTF_Font *font = loadFont("OpenSans.ttf", 14)
. Ao final, a fonte deve ser liberada comTTF_CloseFont(font)
.
- Desenho
drawImage(img, x, y)
: desenha a imagemimg
(do tipoSDL_Surface*
) de forma que seu canto superior esquerdo fique na posição (x
,y
) da tela.drawCenteredImage(img, x, y)
: desenha a imagemimg
(do tipoSDL_Surface*
) de forma que o seu centro fique na posição (x
,y
) da tela.drawText(text, font, color, x, y)
: escreve o textotext
na posição (x
,y
) da tela, usando a fontefont
(carregada comloadFont()
) e a corcolor
(do tipoSDL_Color
).drawLine(x1, y1, x2, y2, r, g, b)
: desenha uma linha da posição (x1
,y1
) até a posição (x2
,y2
) da tela, usando a cor (r
,g
,b
), onde cada componente da cor vai de 0 a 255.
- Game loop
gameLoop()
: executa o game loop (processEvent
,update
,draw
), precedido deinit()
e sucedido pordestroy()
.endGameLoop()
: finaliza a executação do game loopisQuitEvent(event)
: indica se o eventoevent
corresponde a fechar a janela ou teclar Esc.
Cenas
O sistema de cenas permite que se organize melhor o código de diferentes partes de um jogo (denominadas cenas), como menu principal, tela de créditos, partida, entre outros.
Cada cena possui seu próprio game loop. A cena padrão é implementada através das funções init()
, destroy()
, processEvent()
, update()
e draw()
. As demais cenas são implementadas por funções com esses mesmos nomes prefixados pelo nome da cena seguido de um underline. Assim, a cena “jogo” é implentada pelas funções jogo_init()
, jogo_destroy()
, jogo_processEvent()
, jogo_update()
e jogo_draw()
.
Ao trocar de cena, executa-se a função destroy
da cena atual e a função init
da nova cena.
Para trocar para uma cena chamada jogo
, use a seguinte instrução: changeScene(jogo)
(note que não há aspas na palavra jogo
). Para trocar para a cena padrão, use a função changeToDefaultScene()
.