
Um pequeno projeto com duas camadas
O protótipo uniu um corpo rígido 2D de uso geral com um modelo simplificado de carro. A simulação inicial começou com algo semelhante ao "Brick", ao qual foram acrescentadas melhorias para criar o "Ship" (deliberadamente inspirado no clássico jogo "Thrust" de 1986), antes de finalmente incluir elementos que proporcionassem uma sensação mais próxima de um "Carro".
No núcleo do sistema, existe uma simples simulação de dinâmica de corpos rígidos 2D. Na época, esse método ainda não era comum nos jogos (com algumas exceções notáveis), e a maioria dos veículos em jogos era construída utilizando uma física básica de ‘ponto’ (F = ma), com componentes rotacionais manipulados por várias "gambiarras". A utilização de física de corpo rígido adequada (incluindo torques) oferece uma rotação mais coerente.
Acima desse núcleo, foi adicionada uma camada de simulação de veículo "novel", baseada em um modelo simples, aproximado e tecnicamente incorreto de como os pneus se comportam. Era basicamente um palpite semi-informado da minha parte e, embora soubesse que não era fisicamente preciso, parecia ser "bom o suficiente" para os meus propósitos naquele momento.
Esses diagramas descrevem a recriação atual em JavaScript. A interface do navegador fornece os controles, a simulação avança em passos de tempo fixos, e o renderizador Canvas desenha o estado resultante. Manter essas funções separadas facilita o acompanhamento de onde um pressionar de botão se torna uma força, e onde essa força se transforma em movimento.
Dois modos de operação permitem que um veículo combine um corpo rígido com uma casca que descreve sua forma de exibição e geometria de colisão, além de um objeto de dinâmica que fornece seu comportamento. O Brick aceita forças de um arrasto de ponteiro; o Ship adiciona empuxo em um ponto de anexo; o Carro adiciona força do motor e direção, com resistência aplicada em quatro posições de pneus. A mudança de modo substitui a casca e o comportamento, preservando a posição e o movimento do corpo.
As forças podem mover e girar o corpo. O corpo rígido monitora a posição e a velocidade, além do ângulo e velocidade angular. Uma força aplicada no centro altera seu movimento; uma força aplicada fora do centro pode também girá-lo. A simulação soma as forças e o torque, atualiza a velocidade e, em seguida, avança a posição e o ângulo. Um ponto em um corpo rotativo possui sua própria velocidade, combinando o movimento do corpo com a rotação ao redor de seu centro.
As barreiras utilizam essa mesma velocidade do ponto. Quando uma forma cruza uma borda, a simulação a move de volta para dentro e aplica um impulso de contato se estiver se movendo em direção à barreira. Um impacto fora do centro pode, portanto, alterar tanto sua velocidade quanto sua rotação. Este é um solucionador de barreiras simples, com bordas sem atrito, em vez de um sistema geral de colisão.
Para cada pneu, o Carro mede a velocidade em sua posição e a resolve em duas componentes: ao longo da direção da roda e lateralmente. Ele aplica uma pequena resistência à rotação e uma resistência muito maior ao movimento lateral. O volante altera as direções das rodas dianteiras, de modo que suas forças também giram o corpo. O freio de mão aumenta a resistência à rotação traseira e reduz a aderência lateral traseira.
Essas forças de resistência são proporcionais à velocidade, sem um limite de força. Esse modelo de amortecimento é conveniente, mas não reflete realisticamente a fricção dos pneus, escorregamento ou aderência disponível. Produz uma sensação útil de que as rodas resistem ao movimento lateral, com muito pouco mecanismo. O Ship e o Brick utilizam o mesmo núcleo físico com diferentes formas de aplicar forças.
O coordenador do veículo solicita ao objeto de dinâmica selecionado que aplique suas forças e, em seguida, avança o corpo rígido. Ele também converte os pontos locais da casca em posições globais para desenho e encontra o ponto de superfície voltado para cada barreira. Quando uma face plana toca uma barreira, ele usa o ponto médio dos pontos de contato, evitando a rotação artificial que a escolha de um único canto introduziria.
Confira os últimos vídeos publicados no canal