Veja como você pode fazer isso:
Movimento aproximado
Todo objeto de física precisa destes vetores:
- Posição : Onde está o objeto.
- Velocidade : como sua posição está mudando.
- Aceleração : como a velocidade está mudando.
Então, intuitivamente, você precisa fazer esse tipo de coisa a cada quadro para cada objeto de física a
:
a.speed += a.acceleration
a.position += a.speed
Armadilhas : Isso é conhecido como o método de integração de Euler . Essa aproximação é melhor para pequenas velocidades e acelerações e com pequenos intervalos de tempo. Em um jogo, isso normalmente é verdade. Mas se um objeto se move muito rápido em direção a uma parede fina ou diretamente em direção a outro objeto em movimento, pode pular a colisão com esse objeto quando sua posição é incrementada por uma quantidade grande o suficiente para atravessá-lo completamente. Se você tiver objetos em movimento rápido, poderá precisar da Detecção Contínua de Colisão para se livrar disso.
Colisão
A colisão pode ser aproximada com este tipo de sequência:
- Detecção : Detecta -se que dois corpos se cruzam.
- Resolução : a posição de cada corpo é alterada para que não mais se cruzem.
- Física : A velocidade de cada corpo é alterada para explicar o momento, a fricção e a restituição (bounciness).
Isso é conhecido como Detecção de colisão discreta, como acontece em momentos distintos no tempo. Cada passo merece atenção:
Etapa 1: Detecção de colisão (as coisas estão colidindo?)
Por dois círculos : verifique se os centros estão mais do que a soma dos raios separados.
Para dois retângulos : Verifique se alguma de suas coordenadas de canto está dentro do outro retângulo.
Para qualquer coisa que envolva polígonos mais complexos , você precisará do Teorema do Eixo Separador , que é um tópico para outra pergunta.
Armadilhas : Existem muitos outros tipos de colisão que você pode querer considerar. Alguns são realmente complexos: polígonos convexos podem se cruzar várias vezes !
Etapa 2: Resolução de colisão (separando-os.)
Um método simples para resolver uma colisão é a conversão por penetração mínima , usando valores obtidos na detecção de colisão. Isso envolve essencialmente afastar os objetos com a menor distância possível de movimento.
Como exemplo, considere a colisão círculo-círculo onde um dos círculos está fixo no lugar. O vetor de deslocamento mínimo tem a mesma direção da diferença entre seus vetores de ponto médio. Seu comprimento é a diferença entre a soma de seus raios e a distância entre os centros.
Essa ideia generaliza facilmente para outras formas.
Armadilhas : Se os dois objetos em colisão forem móveis, talvez seja necessário movê-los por uma fração da distância total para obter uma aproximação crível do movimento deles. Eles obviamente terão que se mover em direções diferentes.
Etapa 3: Física da colisão (Outras alterações.)
A coisa mais óbvia que costuma acontecer é que um ou dois objetos mudam de direção, ou seja, giram seu vetor de velocidade. Isso é muito fácil de implementar.
Armadilhas : os objetos podem ser elásticos , mas podem não ser , nesse caso a energia total no sistema é reduzida. Pode ser necessário arrastar devido à resistência do ar. O atrito (particularmente o atrito estático ) é notoriamente complexo de implementar .
Algumas conclusões
A simulação da realidade é exponencialmente mais difícil, se você quiser simular. Você está entrando em um campo minado de incontáveis casos extremos, fórmulas surpreendentemente difíceis e pilhas cada vez maiores de documentos de pesquisa.
Se suas necessidades são simples ou você está ansioso para aprender, tente.
Se suas necessidades são complexas ou você não gosta de matemática, procure um mecanismo de física para detalhar os detalhes. Box2D e Bullet são bastante populares nos jogos.