Os jogos mais avançados que eu fiz são um jogo de bilhar de 8 bolas feito com o mecanismo de física Box2dFlashAS3 e um jogo de plataforma com níveis.
Quando fiz jogos de plataforma, sempre quis saber como criar um mecanismo, para poder reutilizá-lo. Quando vejo jogos com declives, declives curvos, gravidade perfeita e física da vida real, sempre desejei saber como codificar o mecanismo.
Sugira técnicas e artigos para qualquer base de conhecimento relevante necessária.
architecture
physics
physics-engine
Vishnu
fonte
fonte
Respostas:
Embora eu recomende não usar seu próprio mecanismo de física para outra coisa senão a experiência de fazê-lo (basta perceber que você provavelmente deve jogá-lo fora quando terminar - é realmente difícil obter todas as questões de edgecases e limite numérico / estabilidade resolvidos , e seu tempo pode ser muito melhor utilizado contribuindo para um mecanismo existente), eis alguns recursos:
Lições do Pool Hall: Detecção de colisão rápida e precisa entre círculos ou esferas discute colisão de círculo / círculo e esfera / esfera.
Os Tutoriais N são maravilhosos para uma compreensão básica da detecção e resposta baseadas no Teorema do Eixo Separador.
fonte
Erin Catto tem todas as palestras da GDC sobre a implementação do Box2D on-line. Box2D também tem código simples de ler, na minha experiência.
fonte
Veja como você pode fazer isso:
Movimento aproximado
Todo objeto de física precisa destes vetores:
Então, intuitivamente, você precisa fazer esse tipo de coisa a cada quadro para cada objeto de física
a
: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:
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.
fonte
Eu acho que isso poderia ser útil: http://gafferongames.com/game-physics/integration-basics/
fonte
Provavelmente, o recurso de estilo de tutorial mais abrangente:
http://www.wildbunny.co.uk/blog/2011/04/06/physics-engines-for-dummies/
Veja também esses artigos relacionados do mesmo blog:
http: // www.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dummies/
http://www.wildbunny.co.uk/blog/2011/03/25/speculative-contacts-an- abordagem de motor de colisão contínua-parte-1 /
fonte
O melhor recurso para aprender a física dos jogos que eu já encontrei é devido a Chris Hecker, da fama de "Spy Party":
http://chrishecker.com/Rigid_Body_Dynamics
fonte