Opções multijogador / rede para um jogo 2D com física [fechado]

7

Resumo:

Meu sidecroller 2D de 50% com o Box2D como mecanismo de física deve ter suporte para vários jogadores na versão final. No entanto, o código atual é apenas um jogo para um jogador.

  • O que eu deveria fazer agora?
  • E mais importante, como devo implementar o multiplayer e combiná-lo com o singleplayer?
  • É uma má ideia codificar o modo singleplayer separado do modo multiplayer (como Notch fez no Minecraft)?

O desempenho no singleplayer deve ser o melhor possível (simular a física com o uso de um servidor de loopback para implementar o modo singleplayer seria um problema)

Histórico completo / perguntas:

Estou trabalhando em um projeto de jogo 2D relativamente grande em C ++, com a física como elemento principal. (Eu uso o Box2D para isso)

O jogo final deve ter suporte completo para vários jogadores, no entanto, cometi o erro de não planejar adequadamente a parte da rede e basicamente trabalhei em um jogo para um jogador até agora.

Eu pensei que o suporte multiplayer poderia ser adicionado ao jogo singleplayer quase acabado de uma maneira relativamente fácil e clara, mas aparentemente, pelo que li, isso está errado.

Eu até li que um jogo multiplayer deve ser programado desde o início, com o modo singleplayer consistindo apenas em hospedar um servidor local invisível e conectar-se a ele por meio de loopback. (Eu descobri que a maioria dos mecanismos de jogos FPS faz dessa maneira, um exemplo seria Source)

Então, aqui estou eu, com meu jogo sidecroller 2D meio acabado e realmente não sei como continuar.

Simplesmente continuar trabalhando no singleplayer / cliente me parece inútil agora, pois eu teria que recodificar e refatorar ainda mais tarde.

Primeiro, uma pergunta geral para quem possivelmente se encontrou em uma situação como esta:

  • Como devo proceder?

Então, o mais específico - eu tenho tentado descobrir como posso abordar a parte da rede para o meu jogo:

(Soluções possíveis:)

  • Servidor invisível / loopback para um jogador

Isso teria a vantagem de que basicamente não há diferença entre o modo singleplayer e multiplayer. Não seria necessário muito código adicional.

Uma grande desvantagem: desempenho e outras limitações no singleplayer. Haveria duas simulações de física em execução. Um para o cliente e outro para o servidor de loopback.

Mesmo se você contornar, fornecendo um caminho direto para os dados do servidor de loopback, através da comunicação direta pelos encadeamentos, por exemplo, o singleplayer seria limitado.

Isso é um problema porque as pessoas devem poder brincar com massas de objetos de uma só vez.

  • Modo singleplayer / multiplayer separado

Não haveria servidor envolvido no modo singleplayer.

Não tenho muita certeza de como isso funcionaria. Mas pelo menos acho que haveria muito trabalho adicional, porque todos os recursos para um jogador precisariam ser reimplementados ou colados no modo multiplayer.

  • Modo multiplayer como um módulo para singleplayer

Este é apenas um pensamento rápido que tive. O multiplayer pode consistir em um jogo singleplayer, com um módulo de rede adicional carregado e conectado a um servidor, que envia e recebe dados e atualiza o mundo singleplayer.

Na retrospectiva, lamento não ter planejado o modo multiplayer anteriormente. Estou realmente preso neste momento e espero que alguém aqui possa me ajudar!


fonte
Talvez um pouco fora do tópico, acho que você já o conhece, mas há uma chance de que seu jogo não tenha terminado 50%.
Cubuspl42 16/05/19

Respostas:

4

Você encontrará um exemplo (com fonte) de física em rede à prova de latência aqui: http://gafferongames.com/2010/03/11/gdc-2010-networked-physics-slides-demo/

Mas primeiro, concentre-se na jogabilidade do seu modo multiplayer. Se for competitivo e trapacear (por meio de engenharia reversa ou violação de pacotes) for um problema, a solução proposta pode não atender às suas necessidades.

Digamos que seu modo multiplayer seja cooperativo. Para o seu modo singleplayer. Eu apenas rodava o mesmo mecanismo de jogo, mas com os recursos de rede desativados, para que o mundo não fosse preenchido com nenhum outro personagem de jogador. Você provavelmente também desejaria carregar dados específicos para o modo multiplayer, para ajustar o conteúdo ao número de jogadores.

Gwened
fonte
1

Eu acho que os pontos positivos de um servidor de loop back local pesam muito longe os negativos. A quantidade de redução de código é extremamente valiosa, na minha opinião.

No que diz respeito à execução de simulações de física redundantes, você deve observar os ticks do servidor, a Valve tem um ótimo artigo aqui . Em um ambiente de servidor local, talvez você possa remover a "simulação do cliente" e simplesmente enviar atualizações do mundo inteiro, em uma situação apenas local, para evitar as simulações de física redundantes, pois você terá muita largura de banda.

Nate
fonte