Estou criando um jogo de plataforma que possui um recurso "cooperativo" que eu gostaria de trabalhar através de redes / internet.
Agora, já li sobre programação de jogos em rede, incluindo artigos como o que todo programador precisa saber sobre redes de jogos e, portanto, entendo a diferença entre técnicas como a etapa de bloqueio ponto a ponto e as arquiteturas de previsão de servidor e cliente:
- Concluí que para qualquer jogo em tempo real que será jogado pela Internet, o bloqueio ponto a ponto simplesmente não é uma opção.
- Também estou preocupado que, mesmo para um jogo de plataforma, uma arquitetura simples de cliente-servidor (sem algum tipo de previsão do cliente) resulte em jogabilidade degradada devido ao atraso entre a ação e a reação causada por uma ida e volta a um servidor. (Dito isto, quero eliminar a necessidade de um servidor central e, portanto, apenas um dos jogadores, o cliente, realmente experimentará esse atraso).
Isso deixa a previsão do cliente, mas mesmo para um jogo simples como um jogo de plataforma, isso ainda parece bastante complexo.
Como eu criaria um sistema preditivo de trabalho para um jogo multiplayer de plataformas?
networking
multiplayer
platformer
Justin
fonte
fonte
Respostas:
Eu não acho que metade da sua base de código se transformará em código de rede se você decidir implementar um recurso como este.
Na minha opinião, a maneira mais simples de fazer isso é configurar um servidor "central" (mesmo que isso signifique que um jogador "hospede" o jogo e depois se conecte ao seu próprio servidor) que aceite todas as entradas do usuário o mais rápido possível e envia de volta para cada cliente.
No cliente, você implementa isso de maneira diferente do que se estivesse fazendo um jogo cooperativo para dois jogadores localmente, exceto que você lê P1 no teclado e P2 na rede.
Você precisará que o servidor envie um estado completo do jogo de vez em quando, e os dois clientes podem ajustar para o novo estado autoritativo do servidor ou deslizar para o novo estado (por alguns segundos). A menos que você tenha uma perda terrível de pacotes ou toneladas de clientes por servidor, essa abordagem deve ser suficiente para a situação descrita.
fonte
Eu tenho um jogo no estilo mMORPG totalmente funcional com previsão do cliente (o jogo está longe de terminar, mas roda 'OK') e tenho algo ao longo de 40.000 linhas de código para o servidor e o dobro para o cliente (adicione a mesma quantidade para ferramentas, etc. .). A previsão provavelmente não é mais do que algumas centenas de linhas (se é que isso é verdade) e toda a rede divide algumas milhares de linhas, mas não mais do que 5.000 (depende um pouco de onde você desenha a linha).
Pergunta confusa resposta confusa ;-)
fonte
Uma proporção significativa do código de rede pode ser independente do jogo que você está jogando. Por isso, e como você é novo em redes, a primeira coisa que sugiro que você faça é encontrar bibliotecas que farão esse trabalho para você. RakNet por exemplo.
Uma coisa que você deseja no código do jogo é a capacidade de lidar com vários estados diferentes do jogo, que você pode usar para interpolação e previsão. É bastante simples de projetar com antecedência, mas pode ser uma quantidade significativa de trabalho se você estiver modificando um jogo para um jogador existente.
Observe também que, se você quiser que estranhos joguem um jogo ponto a ponto pela Internet, provavelmente precisará de pelo menos um servidor em algum lugar que lide com o lobby / organização de partidas.
fonte