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:
- //Aplicando a imagem na tela
- apply_surface(x , y, imagem, screen );
- /*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 */
- //Podemos então desenhar esta imagem em outro local e simplesmente atualizar a tela
- apply_surface(x+1, y+1, imagem, screen);
- SDL_Flip(screen)
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.- while(SDL_PollEvent(&event)) /* Repetir enquanto houverem eventos */
- {
- switch(event.type) /* Processar o tipo do evento */
- {
- case SDL_KEYDOWN: /* Tratar um evento KEYDOWN (tecla pressionada) */
- printf("Foi pressionada uma tecla!\n");
- if(event.key.keysym.sym == SDLK_LEFT)
- printf("Esquerda!\n");
- break;
- case SDL_MOUSEMOTION:
- do{}while();
- .
- default: /* Evento não tratado */
- printf("Ãhn?!\n");
- }
- }
Boa sorte e bons estudos!
1 Comentários
Muito bom seu blog e os artigos que escreve. Está de parabéns pelo fantástico trabalho.
ResponderExcluirTambém tenho um blogger caso deseje comentar.
http://ivanluiz-jornalista.blogspot.com/