Corona SDK tutorial 03: Trials

Se você, alguma vez na vida, navegou na rede mundial de computadores, vulgo internet, ou costuma jogar no seu smartphone, certamente já se deparou com algum dos jogos da serie Trials e suas cópias seus similares. Que são jogos onde deve-se pilotar um veículo e tentar atravessar obstáculos influenciados pela física.

Trials Frontier, da RedLynx

Nos jogos, a física costuma ser usada para mover, colidir e interagir com outros corpos e outras forças. O Corona possui uma biblioteca nativa construída com base no Box2D, uma das mais famosas engines de física 2D existentes, com suporte a javascript, actionscript e entre outras linguagens.

Nesse tutorial iremos criar um carro e move-lo através de um simples cenário, utilizando a física para isso. Antes de iniciarmos, vamos a uma rápida introdução de alguns ternos que serão aplicados neste tutorial.

Tipos de Corpos:

  • dinâmico (dynamic): corpos dinâmicos se movem de acordo com todas as forças aplicadas sobre ele e colidem com os demais tipos de corpos;
  • estático (static): corpos estático não se movem (a não ser manualmente), ou seja, as forças aplicadas não exercem influencia sobre eles e não colidem com outros corpos estáticos ou cinemáticos;
  • cinemático (kinematic): corpos cinemáticos são semelhantes aos estáticos, porém podemos definir uma velocidade a eles, mas não sofrem com a ação da gravidade.

Propriedades dos Corpos:

  • densidade (density): esse valor é multiplicado pela área do corpo para determinar a massa;
  • fricção (friction): determina a quantidade de atrito do objeto;
  • elasticidade (bounce): determina quanto da velocidade é retornada após uma colisão.

Agora, devidamente apresentados, vamos adicionar um chão para que nosso carro não fique caindo nas profundezas do infinito. Para isso devemos importar a biblioteca physics, definir a gravidade e inicia-lá. Após isso inserimos um retângulo e adicionamos um “corpo” a ele utilizando a função physics.addBody(), informando o objeto que receberá o corpo, o tipo de corpo (static) e outros 3 parâmetros: density, friction e bounce. Também iremos adicionar dois obstáculos.

Agora que temos um lugar para “cair”, podemos criar a carroceria e as rodas do nosso carro. Adicionamos as imagens e depois definimos seus corpos (dynamic). Porém, após fazer isso, teremos um chão e três corpos “soltos”. Então temos que unir a carroceria e as rodas, para isso vamos utilizar um joint. Os joints servem para ligar dois corpos, existem vários tipos deles, mas para este caso especifico, vamos utilizar o Wheel Joint. Ele funciona semelhante a um pistão/mola permitindo que um dos corpos possa ser rotacionado.

sem joint

com joint

Feito isso vamos colocar as rodas para girar e fazer o carro se mover. Vamos adicionar os controles, que serão formados por 4 botões, um para mover para trás, um para para frente, um para rotacionar o carro para frente e outro para rotacionar ele para trás.

trial_tuto

Agora fique a vontade para criar sua pista, mudar a gravidade e os parâmetros do carro. As configurações podem variar muito de acordo com o foco do seu jogo, tipo de veículo e obstáculos. Como de costume, o projeto está no Github (: