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 largurawe alturah. Sewehforem omitidos, considera 800x600.
- Carregamento de arquivos
loadImage(filename): carrega o arquivo de imagemfilenamee 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 fontefilenamecom tamanho desizepontos. 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 textotextna 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 eventoeventcorresponde 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().