Atualmente, estou desenvolvendo um shooter de zumbi de cima para baixo, em tempo real. Estou codificando isso em Java, usando o JBox2D como meu mecanismo de física. Eu tenho codificado a rede esta semana e agora estou pronto para a sincronização física.
Estou planejando usar o modelo preditivo de cliente / servidor autoritário, no qual o cliente pode se mudar, desde que o servidor aprove mais tarde. Isso envolve o cliente enviando pacotes contendo dados de movimento para o servidor, e o servidor calculando a latência e simulando novamente o mundo a partir de um estado mais antigo.
Meu problema é que meu atual mecanismo de física, o JBox2D (basicamente uma porta do Box2D), não suporta reverter o mundo e, aparentemente, não é tão fácil serializar os dados do mundo. Eu tenho duas soluções, eu poderia modificar / estender meu mecanismo de física atual ou escrever o meu.
Razões para escrever meu próprio mecanismo de física -
- Eu posso remover recursos desnecessários. Em um jogo de cima para baixo, eu realmente só preciso de mecânica de colisão e forças de manuseio. Nenhuma gravidade está envolvida.
- Eu posso entender melhor o código e [provavelmente] seria mais fácil implementar funções de reversão
Razões para estender / modificar o JBox2D
- Escrever meu próprio mecanismo de física seria uma quantidade significativa de trabalho, o que poderia ser complicado
- JBox2D tem uma comunidade amplamente solidária, que pode me ajudar com meu desenvolvedor
- JBox2D, possui otimizações específicas, para coisas como detecção de colisão, que o tornam útil
- Alguns trabalhos já foram feitos sobre isso, mas pouco código foi compartilhado
Então quais são suas opiniões. Este é o meu primeiro jogo, e eu não sou um desenvolvedor profissional de jogos. Se alguém pudesse fornecer alguns links para o trabalho já realizado na área (de preferência usando JBox2D / Box2D / Java).
fonte
strictfp
qualquer lugar, o que afetará seriamente o desempenho. Caso contrário, o servidor e o cliente podem não obter exatamente os mesmos resultados. Eu recomendaria o uso de ponto fixo.Respostas:
A detecção de colisão em 2D é tão simples que nem sei por que você se incomodaria em usar um mecanismo de física em primeiro lugar. E já que todas as forças de manuseio são diretas ou em uma curva (sem cair, alterar diagnósticos etc.). Fazer o seu próprio é simples. Colisão:
são responsáveis pelas 3 colisões possíveis que podem ocorrer em 2 retângulos:
EDIT: Como comentado, estou muito menos familiarizado com esse assunto e não deve ser consultado sobre a colisão de balas / projéteis.
Quando trabalhei com balas no espaço 2D, usei uma espécie de remendo que funcionava tanto em linha reta como em curva, onde lançava o projétil usando o mecanismo de física (que não fiz do zero) e usava colisão padrão.
Leia sobre como criar isso do zero nos comentários.
EDIT: * Confie em mim, * independentemente de qual, você precisará de alguma forma de acerto de contas no mecanismo de jogos, por causa dos projéteis e quantos projéteis podem estar na tela a qualquer momento. Você ABSOLUTAMENTE não deseja atualizar todos os marcadores na tela por quadro, em um determinado local. Mas é uma ótima maneira de tornar o jogo lento demais: D! Você só deve atualizar estas coisas apenas:
Agora atualize os dados no mecanismo de acordo com esses dados, em vez de no servidor para cada maldito projétil, e envie dados de pacotes para cada marcador. (Imagine fazer isso com apenas duas metralhadoras na tela! Jesus!)
fonte