Pular para o conteúdo principal

BIblioteca SDL e o desenvolvimento de jogos 2D - Parte 2

Continuando o desenvolvimento, podemos pular já para a parte de fazer uma pequena animação.

Animação:

O conceito básico de animação é o seguinte, você apagar uma imagem em um local e desenhá-la em outro, claro que isso repetidamente. Sei que pode não ser o meio mais adequado mas o que eu sugiro é o seguinte:
  1. //Aplicando a imagem na tela
  2. apply_surface(x , y, imagem, screen );
  3. /*Onde x = coordenada x na tela e y = coordenada y na tela , imagem é a origem (alguma surface que você tenha criado anteriormente e carregado a imagem para ela), screen é o destino, ou seja, onde a surface irá ser aplicada */
  4. //Podemos então desenhar esta imagem em outro local e simplesmente atualizar a tela
  5. apply_surface(x+1, y+1, imagem, screen);
  6. SDL_Flip(screen)


É algo prático, você pode por exemplo implementar um for e aí então ir desenhando e apagando continuamente a imagem até um ponto desejado.

Eventos:
um evento é uma mensagem para o seu programa, pode ser recebida do sistema ou da biblioteca, indicando que algo externo ocorreu, por exemplo, o usuário moveu o mouse ou pressionou uma tecla no teclado. Um exemplo de evento que pode ser recebido do sistema é uma mensagem de saída - o usuário pode ter enviado uma ordem de desligamento para o sistema, que por sua vez envia aos programas abertos uma mensagem de encerramento.

No momento em que um evento ocorre no sistema, a SDL insere informações sobre o mesmo em uma estrutura chamada fila de eventos, que funciona como o nome indica: o primeiro elemento a ser inserido (pela biblioteca, em razão de um acontecimento externo) será o primeiro a ser retirado, quando você (o programa) assim o pedir. A maneira mais usual de proceder com o tratamento de eventos é a seguinte:

Loop principal
(...)
Enquanto houver eventos na fila
Retirar evento da fila
Tratar (ou ignorar) evento

A SDL provê uma função chamada SDL_PollEvent que verifica se ainda há eventos a serem tratados, e se for o caso, retorna informações sobre eles.

int SDL_PollEvent(SDL_Event *event);

A estrutura SDL_Event possui um campo chamado type, que indica o tipo do evento (teclado, mouse, joystick, etc) e um campo para cada tipo de evento, sendo que as informações sobre o evento atual estão dentro do campo correspondente. Por exemplo, em um evento de teclado, as informações sobre ele, tal como tecla pressionada, estarão armazenadas em event.key.
  1. while(SDL_PollEvent(&event)) /* Repetir enquanto houverem eventos */
  2. {
  3. switch(event.type) /* Processar o tipo do evento */
  4. {
  5. case SDL_KEYDOWN: /* Tratar um evento KEYDOWN (tecla pressionada) */
  6. printf("Foi pressionada uma tecla!\n");
  7. if(event.key.keysym.sym == SDLK_LEFT)
  8. printf("Esquerda!\n");
  9. break;
  10. case SDL_MOUSEMOTION:
  11. do{}while();
  12. .
  13. default: /* Evento não tratado */
  14. printf("Ãhn?!\n");
  15. }
  16. }
Bom, espero que ter passado um pouco do que aprendi nessas duas semanas estudando SDL, breve postarei aqui o meu projeto do jogo realizado utilizando apenas funções de eventos e 'blitagem' de superfícies.

Boa sorte e bons estudos!

Comentários

  1. Muito bom seu blog e os artigos que escreve. Está de parabéns pelo fantástico trabalho.
    Também tenho um blogger caso deseje comentar.
    http://ivanluiz-jornalista.blogspot.com/

    ResponderExcluir

Postar um comentário

Postagens mais visitadas deste blog

Utilizando o padrão de referências da ABNT no Word

Uma importante funcionalidade do Microsoft Word é o seu Gerenciador de Fontes Bibliográficas. Para aqueles que estão escrevendo algum trabalho acadêmico ou científico, é possível cadastrar todas as referências do trabalho e no final gerar a listagem já enumerada dos documentos que foram consultados na pesquisa. Essa postagem traz os arquivos necessários e as instruções para facilitar essa etapa da elaboração.

Como interpretar e utilizar gráficos

A quantidade de uma única postagem nos últimos 5 anos de blog mostra o quanto estive focado em outras coisas e sem tempo para escrever aqui. Porém, no meio de uma pandemia e com a finalização do meu doutorado, acabei ficando com mais tempo e colocando como meta a volta das publicações aqui no blog.
Nunca antes na história desse país a população, de uma maneira geral, se preocupou tanto com gráficos, curvas, média e outras questões básicas da estatística. Assim, em tempos de coronavírus, essa postagem tem o objetivo de auxiliar que mais e mais pessoas consigam interpretar gráficos, fazer comparações e, inclusive, saber o melhor tipo de gráfico para usar em determinados casos.

Programação Paralela e por que você deveria se preocupar com isso (Parte 1)

Creio que a maioria dos desenvolvedores já deve ter ouvido falar de threads, aprendeu um pouco sobre semáforos, monitores e travas. Partindo desse meu pensamento, imagino que essa mesma maioria não utiliza nenhuma forma de programação paralela em suas aplicações. A pergunta que fica é: utilizar paralelismo e lidar com concorrência tem baixa popularidade entre os desenvolvedores porque não tem utilidade ou porque os cursos de graduação em computação estão carentes de uma disciplina que ensine aos graduandos os reais benefícios em ter uma base sólida nesta área?

Esta série de publicações irá trazer uma visão básica sobre Parallel Programming, os exemplos serão baseados em Java e muito do que mostro aqui pode ser encontrado de maneira mais aprofundada no livro "The Art of Multiprocessor Programming", dos autores Maurice Herlihy e Nir Shavit.