Recentemente, mudei meu mecanismo de jogo dos comportamentos de direção para o movimento baseado em impulsos com uma resolução de colisão adequada com base no tempo. Isso resolveu muitos problemas (sem mais túneis, sim) e tornou a simulação muito mais estável. No entanto, com a estabilidade, surgiu um novo problema.
As três bolas começaram sua jornada perto da parte inferior da imagem, seu alvo era onde a bola rosa parou. No caminho, as bolas vermelhas e verdes ficaram presas no ponto de estrangulamento na parede.
Antes, eu podia confiar em erros de ponto flutuante e na instabilidade geral dos comportamentos de direcionamento para fazer as bolas verdes e vermelhas baterem umas nas outras até conseguirem passar pelo ponto de estrangulamento. Agora, com uma resolução de colisão adequada, as forças que atuam sobre as bolas se cancelam, o que resulta nas bolas permanecendo perfeitamente paradas.
Quais métodos são comumente usados para resolver essas situações? Talvez algum tipo de sistema de enfileiramento prioritário funcione, embora eu possa vê-lo se tornar complexo quando precisar decidir a prioridade entre mais de 2 objetos.
fonte
Respostas:
Atribua a cada objeto móvel um índice exclusivo e proíba que um objeto com um índice mais alto mova um agente com um índice mais baixo. Isso permitirá que objetos 'mais antigos' deslizem objetos 'mais novos', mas não vice-versa e é menos sobrecarga que a fila. Essencialmente, o índice atua como uma prioridade de movimento.
fonte
adicione tempo à localização do caminho
Aqui está um artigo que fala sobre esse cubo de tempo: http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Applications_files/coop-path-AIWisdom.pdf
e aqui está uma implementação do Objective-C: http://allseeing-i.com/ASIPathFinder
fonte
Na verdade, acho que você não deveria consertar. Se (eu acho) as setas indicam vetores de força aplicados a qualquer esfera, em qualquer posição da grade (provavelmente interpolada "bi-linearmente" ou da mesma forma, ou de alguma forma mais "analógica" do que apenas ser 0/1), então o o comportamento é fisicamente correto e você deve se felicitar por ter uma solução bem comportada.
As duas esferas estão em bom equilíbrio, pois ficam sentadas e se odeiam. Aparentemente, se eles se moverem um pouco para a direita, a "flecha de força" para a direita afeta um pouco mais a esfera do lado direito (e vice-versa na esfera do lado esquerdo; um pouco menos), e então eles voltam ao equilíbrio. Assim é como deve ser.
Imho, o que deve ser consertado é a parede, ou o tamanho da esfera, ou qualquer outra coisa entre as próprias pedras de compilação. Você criou uma impossibilidade e o comportamento correto nessa situação é, consequentemente, um impasse (desculpe-me por usar palavras incorretas, espero que você as entenda de qualquer maneira :-)).
Talvez, em vez disso, desative as setas de força esquerda / direita mais próximas ou organize-as de outra maneira que não seja simétrica e não incentive o equilíbrio ?
Eu acho que seria uma solução ruim corrigi-lo artificialmente ... ficaria peludo muito cedo.
fonte