Ladrilhando Física usando Farseer

9

Estou tendo um problema com o Farseer Physics Engine, onde, em um ambiente lado a lado, meu objeto às vezes interage com cantos de outros objetos, mesmo que eles se alinhem perfeitamente.

Ladrilhando Física usando Farseer

Eu li sobre pessoas sugerindo que você calcule e crie um objeto maior, usando Marching Squares ou algo semelhante. No entanto, essa não é uma opção, pois eu gostaria que cada peça tivesse qualidades físicas diferentes, como diferentes atritos e restituições.

Minha pergunta é: o que exatamente está causando isso, são problemas de precisão de flutuação ou algo mais? E existe uma maneira de consertar isso, sem interromper todo o mecanismo de física?

William Mariager
fonte
Gostaria de saber se você pode simplesmente expandir as caixas de colisão em um pixel, para que elas se sobreponham um pouco. Pode ver a superfície como mais conectada, talvez.
precisa saber é o seguinte
@ Doug: Acabei de testar isso e não fez nenhuma diferença.
William Mariager
Os ladrilhos são corpos estáticos?
precisa saber é o seguinte
@bummzack: Sim, eles são.
precisa
Estou tendo exatamente o mesmo problema. Eu recebo o efeito "quicar" quando meu objeto móvel é um retângulo ou um círculo. Também não consigo converter vários quadrados em um retângulo grande, porque quero que o jogador tenha a capacidade de "remover" peças individuais em determinadas situações.

Respostas:

5

O Farseer usa um solucionador iterativo; portanto, quando sua roda começar a colidir com outro retângulo em alta velocidade, de tempos em tempos você verá solavancos, pois é um "alinhamento perfeito" para nós, não para uma simulação de física, com iterações como essas nunca seja "perfeito em pixels".

Você precisará converter retângulos em formas Edge / Loop e modelar diferentes qualidades físicas com hacks, como criar limites artificiais de blocos e alterar propriedades quando o personagem entrar em uma caixa delimitadora, mas nem toda qualidade física pode ser emulada dessa maneira.

Mais cedo ou mais tarde, você acabará escrevendo sua própria física baseada em ladrilhos, em vez de Farseer. Se o seu jogo não tiver muitos quebra-cabeças de física complexos, será mais fácil abandonar o Farseer completamente e lançar sua própria física baseada em peças.

EnoughTea
fonte
Na verdade, comecei a codificar meu próprio mecanismo de física, especificamente para esse mecanismo de ladrilhos, já que não parece haver soluções elegantes.
William Mariager 28/08
Decidi marcar esta como a resposta, pois não parece haver nenhuma solução simples, e é melhor codificar sua própria solução. Ou aceite que você não pode ter uma física diferente e use os Marching Squares para criar corpos maiores.
William Mariager 28/08
0

você pode otimizar as formas das colisões, essa cena pode ser feita com apenas quatro retângulos.

você pode juntar caixas correlativas para aumentar uma.

este vídeo mostra http://www.youtube.com/watch?v=eyhGckHgkkE

ao adicionar caixas, você pode ver um retângulo azul claro com a forma otimizada.

Blau
fonte
11
Como eu disse no terceiro parágrafo, transformar um grupo de objetos em um objeto maior não é uma opção, pois eu perderia propriedades individuais.
William Mariager
você também pode agrupá-los por suas propriedades físicas. acho que não é muito comum ter vários bloqueios físicos juntos.
Blau
Agrupá-los por qualidades físicas me daria o mesmo problema se o terreno mudar muito em um trecho. Pode ser incomum, mas, no entanto, é o que eu preciso.
precisa
0

Hmm ... suspeito que possa ter algo a ver com o seu círculo e não com os ladrilhos abaixo dele. Tente fazer o solo usando um único casco e veja se obtém os mesmos resultados. Caso contrário, são os ladrilhos como você suspeita. Nesse caso, seu círculo não é tão redondo quanto você imagina.

John McDonald
fonte
Eu testei isso. Usando um grande retângulo, não há problemas.
William Mariager 26/08
k, telhas são o problema, então
John McDonald