Estou fazendo um jogo de sinuca como um jogo. Este jogo requer reflexos corretos (ou muito precisos). Eu tentei Box2D e Bullet Physics , mas ambos têm esse problema.
Se houver uma parede em cima desta imagem, espera-se que a linha vermelha siga uma bola real em um jogo de bilhar. Mas os motores geralmente mostram o curso da linha verde. Especialmente,
- Isso acontece depois que uma bola que se move lentamente atinge a parede.
- Às vezes, uma bola que se move rapidamente fica mais lenta de repente.
Estou encontrando um mecanismo de física que pode simular o jogo de bilhar com precisão, tanto quanto possível, sem esses problemas. Posso obter algumas recomendações? Agora estou pesquisando a Newton Game Dynamics , mas não tenho certeza de que o mecanismo mostrará o que quero. Estou considerando o mecanismo PhysX como um próximo teste e preciso fazer o meu próprio se nada funcionar. Mas é óbvio que vai demorar muito tempo, então eu gostaria de não fazer isso. Ficarei muito agradecido se você economizar meu tempo. E, claro, a solução com Box2D / Bullet Physics também é bem-vinda.
Estou trabalhando com C / C ++ / Objective + C no iOS.
Anexo minha configuração com o Box2D.
Paredes
- forma estática da caixa
- amortecimento linear / angular = 0,1
- restituição = 1,0
- fricção = 100
- densidade = 10
- bullet = false
- rotação fixa = false
- escala inercial = 1,0
Bolas
- forma de esfera dinâmica
- amortecimento linear / angular = 0,1
- restituição = 1,0
- fricção = 100
- densidade = 20
- bullet = true
- rotação fixa = false
- escala inercial = 1,0
Respostas:
Várias soluções.
Para Box2D, defina
b2_velocityThreshold
nob2Settings.h
arquivo. No meu caso, eu configurei0.0f
e funcionou! Massa, fricção, amortecimento NÃO foram problema. Verifique este tópico de discussão para obter mais detalhes. http://www.box2d.org/forum/viewtopic.php?f=3&t=6906&p=30782#p30782Usando outro mecanismo de física. A Newton Game Dynamics configurou o desempenho correto por padrão. No entanto, é possível usar a dinâmica de Newton no iOS, mas é um pouco mais difícil do que outros. Eu usei vários dias para configurá-lo para iOS.
Também estou perguntando nos fóruns do BulletPhysics. Vou atualizar isso quando tiver uma solução.
- (editar) -
Existem alguns atributos de limite no Bullet, no entanto, não consegui encontrar exatamente a mesma coisa
b2_velocityThreshold
.Isso parece semelhante, mas não funcionou bem.
fonte
O Box2D fará o que você deseja, mas você deve definir as constantes de restituição (rebote) para os equipamentos de parede e bola. Para um jogo de sinuca, você provavelmente deseja começar com uma restituição perfeita e alto atrito, mas amortecimento linear e angular, e ajustar a partir daí.
fonte
Os mecanismos de física têm um limite de rejeição. Não sei como fazê-lo em nenhum desses motores, mas o limite que está sendo definido muito alto fará com que ele ignore os impactos sob uma certa velocidade. Abaixe o limite de rejeição e ele retornará em velocidades mais baixas.
Eu sei que você pediu um mecanismo de física diferente, mas todos os mecanismos de física que conheço usam limites de rejeição para impedir que os objetos tremem quando estão sentados um em cima do outro. Portanto, sugerir um bom mecanismo de física será contraproducente, pois qualquer bom mecanismo de física terá esse efeito.
fonte
Eu tive esse problema e para mim a solução estava fornecendo a restituição perfeita.
Então, para mim, isso é sqrt de 0,5 para todos os objetos. Porque sqrt (r1 * r1 + r2 * r2) == 1 em situação perfeita.
fonte