Jogos: Game Loop e Tratamento de colisão em Javascript
Jogos: Game Loop e Tratamento de colisão em Javascript
Esta é o segundo Post sobre uso de Javascript e do Canvas do html 5 para o desenvolvimento de jogos 2D. No Post anterior (Jogos: Introdução ao Canvas do HTML5) abordamos os conceitos de Canvas, Sprite, frame e de movimento.
Conceitos Abordados neste Post
- Game Loop
- Tratamento de Colisão
Nesta aula, abordaremos os conceitos de game loop e o tratamento de colisões.
Game Loop
Jogos, geralmente, são implementados em um loop que obedece à seguinte sequência a cada iteração do loop. Primeiramente, as entradas são lidas, tais como teclas pressionadas, ou movimentos no Joystick. A partir das entradas, as informações sobre o mundo do jogo, são atualizadas. Após isso, a pontuação é calculada. Na última, etapa iteração, o jogo é redesenhado para refletir o estado atual.
Abaixo segue o código HTML da página para o nosso exemplo.
Vamos mostrar o uso do game loop, a partir do nosso exemplo anterior da tartaruga.
Nesta forma de implementar o GameLoop para o exemplo da tartaruga, criamos uma função que realiza as seguintes tarefas em sequência. Primeiramente, a tela anterior é limpa. Depois, o frame corrente da tartaruga é alternado entre um e zero. Estamos apenas usando esses dois frames, porque esse é apenas um exemplo simples, e queremos dar impressão que a tartaruga está se movendo, mesmo que nenhuma tecla seja pressionada. Após isso, a função, desenha, é chamada para desenhar o estado atual do jogo. Finalmente, a função setTimeout é chamada, passando a função game loop como argumento é passando o tempo em milissegundos que a função GameLoop deve ser executada novamente. Nesse exemplo, estamos passando o tempo de 1000 milissegundos, ou seja, 1 segundo. Para o nosso exemplo, esse é um tempo de atualização de jogo suficiente, no entanto, para jogos dinâmicos esse tempo é insuficiente, sendo necessário taxas de redesenho ou refresh por volta de 60 frames por segundo.
O navegador consegue,também, executar até a taxa de atualização da tela do dispositivo, que é normalmente 60fps. Mas isso nem sempre é possível. Além disso, como o navegador controla o que está sendo desenhado, se minimizarmos o navegador ou trocarmos de guia, ele pode desacelerar o loop para que sua CPU não funcione desnecessariamente, tornando-o também o método mais eficiente.
Resultado
Como resultado, do uso do game loop, podemos ver a tartaruga se movendo, mesmo quando nenhuma tecla é pressionada. Isso ocorre em função das sucessivas chamadas da função game loop.
Tratando Colisões
Outro elemento essencial de um jogo é o tratamento de colisões. O tratamento de colisões é fundamental para verificar se um personagem tocou outro ou alguma coisa, ou para verificar se dois objetos se tocaram. A partir desta detecção, alguma ação é realizada.
Colocando mais um elemento
Esse é o resultado da execução do código.
Chegamos ao final deste Post. O código completo desta lição está no Github e pode ser acessado por meio do link nos comentários. A execução do código pode ser vista neste link. Se esse Post foi útil para você, por favor, considere deixar um comentário.
Comentários
Postar um comentário