O que está envolvido em um jogo UDP simples?

17

Uma vez tentei escrever um jogo simples com o UDP em uma semana como um teste descartável. Foi horrivelmente.

Joguei fora cedo. O principal problema que tive foi restaurar o estado do jogo de todos os jogadores / inimigos / objetos para um estado antigo e avançar o jogo até o ponto em que o jogador está jogando (ou seja, meio segundo antes de um salto. Um pouco mais cedo ou mais tarde pode faça o jogador errar o salto)

Talvez esse método não seja a maneira mais fácil? Eu suspeito que seja, mas eu o projetei errado desde o início e percebi no final do segundo dia. (então eu não aprendi muito ou perdi muito tempo)

Para mim e para os outros, o que está envolvido em um jogo UDP simples e como eu escrevo um? Ou como eu resolvo o problema de previsão restaurando para indicar corretamente.

Vou marcar isso como CW bc, sei que haverá muitas respostas úteis.

usuário
fonte

Respostas:

9

Glenn Fiedler escreveu um excelente conjunto de artigos sobre isso, que abrange praticamente todos os conceitos básicos.

falstro
fonte
O artigo Determinism Floating Point explodiu minha cabeça. Seu estado de sincronização muito ruim não é feito porque é o que eu queria ler. Embora o determinismo do ponto flutuante responda muitas perguntas.
Nenhum desses artigos ir em profundidade sobre o estado-sincronização, que é o que ele está pedindo
BlueRaja - Danny Pflughoeft
3

Fazer o seu próprio desenvolvimento pode ser educativo, mas muitas vezes você faz mais se pode aproveitar uma implementação existente (ou pelo menos começar a partir daí).

Eu usei o ENet e o Raknet . Eu só usei o Enet em um jogo simples, mas ele fez o que eu precisava. A Enet usa uma API de nível inferior ao Raknet. Raknet foi usado em um projeto maior. O Raknet é extremamente poderoso, mas quer fazer você estruturar seu jogo em torno da estrutura do Raknet.

Enet:

  • Gerenciamento de conexões
  • Sequenciamento
  • Canais
  • Confiabilidade
  • Fragmentação e remontagem
  • Agregação
  • Adaptabilidade
  • Portabilidade
  • Liberdade

Raknet:

  • Replicação de objeto
  • Autopatcher
  • Conexões seguras
  • Camada de comunicação robusta (basicamente todos os recursos do Enets agrupados em um item)
  • Chamadas de procedimento remoto
  • Comunicação por voz
  • Avanço NAT
deft_code
fonte
+1 para ENet, já o uso há algum tempo para clientes e eles gostam.
precisa
Ele está perguntando sobre a sincronização de estado - essa resposta não tem nada a ver com isso.
BlueRaja - Danny Pflughoeft
-1, mesmo motivo que BlueRaja
Jonathan Dickinson
2

Se você tiver tempo e energia, poderá baixar a fonte do Quake 3 e estudá-la. É fácil compreender se você se sente confortável com C e igualmente fácil de mexer.

Quais outros jogos multiplayer têm fonte disponível e usam UDP?

BRaffle
fonte
1
Há um artigo que descreve o código também. trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking
Zooropa
0

Se você for homebrew (como eu), vai aprender muito - também sobre coisas que não queria saber. Como NAT atravessado. De acordo com Caspin, a Enet está perdendo isso, mas você sempre pode encontrar algum código STUN de código aberto que funcione na maioria das situações.

Jonas Byström
fonte