Qu'implique un simple jeu UDP?

17

J'ai essayé une fois d'écrire un jeu simple avec UDP en une semaine comme test jetable. Cela s'est horriblement mal passé.

Je l'ai jeté tôt. Le principal problème que j'ai eu était de restaurer l'état de jeu de tous les joueurs / ennemis / objets à un ancien état et d'avancer rapidement le jeu au moment où le joueur joue (c'est-à-dire une demi-seconde avant un saut. Un peu tôt ou tard peut faire manquer le saut au joueur)

Peut-être que cette méthode n'est pas le moyen le plus simple? je le soupçonne mais je l'ai mal conçu dès le début et réalisé à la fin du 2ème jour. (donc je n'ai pas trop appris ou perdu autant de temps)

Pour moi et pour les autres, qu'est-ce qui est impliqué dans un jeu UDP simple et comment en écrire un? Ou comment résoudre le problème de prédiction en restaurant correctement.

Je vais marquer cela comme CW bc je sais qu'il y aura beaucoup de réponses utiles.

utilisateur1047
la source

Réponses:

9

Glenn Fiedler a écrit un excellent ensemble d'articles à ce sujet, qui couvre à peu près tous les concepts de base.

falstro
la source
L'article sur le déterminisme en virgule flottante m'a fait exploser la tête. Son état de synchronisation trop mauvais n'est pas fait parce que c'est celui que je voulais lire. Bien que le déterminisme à virgule flottante réponde à de nombreuses questions.
Aucun de ces articles n'aborde en détail la synchronisation d'état, c'est ce qu'il demande
BlueRaja - Danny Pflughoeft
3

Rouler la vôtre peut être éducatif, mais vous en faites souvent plus si vous pouvez tirer parti d'une implémentation existante (ou au moins commencer à partir de là).

J'ai utilisé à la fois ENet et Raknet . Je n'ai utilisé Enet que dans un jeu simple, mais il a fait ce dont j'avais besoin. Enet utilise une API de niveau inférieur à Raknet. Raknet a été utilisé dans un projet plus vaste. Raknet est extrêmement puissant, mais veut vous faire structurer votre jeu autour du cadre de Raknet.

Enet:

  • Gestion des connexions
  • Séquençage
  • Chaînes
  • Fiabilité
  • Fragmentation et réassemblage
  • Agrégation
  • Adaptabilité
  • Portabilité
  • Liberté

Raknet:

  • Réplication d'objets
  • Autopatcher
  • Connexions sécurisées
  • Couche de communication robuste (essentiellement toutes les fonctionnalités Enets regroupées en un seul élément)
  • Appels de procédure à distance
  • Communication vocale
  • Punch NAT
deft_code
la source
+1 pour ENet, je l'utilise depuis un certain temps maintenant pour les clients et ils aiment ça.
Len Holgate
Il pose des questions sur la synchronisation des états - cette réponse n'a rien à voir avec cela
BlueRaja - Danny Pflughoeft
-1, même raison que BlueRaja
Jonathan Dickinson
2

Si vous avez le temps et l'énergie, vous pouvez télécharger la source Quake 3 et l'étudier. C'est assez facile à comprendre si vous êtes à l'aise avec C, et tout aussi facile à bricoler.

Quels autres jeux multijoueurs ont une source disponible et utilisent UDP?

BRaffle
la source
1
Il y a aussi un article qui décrit le code. trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking
zooropa
0

Si vous allez à la maison (comme je l'ai fait), vous allez en apprendre beaucoup - aussi sur des choses que vous ne vouliez pas savoir. Comme la traversée NAT. Selon caspin, Enet est absent, mais vous pouvez toujours trouver du code STUN open source qui fonctionne dans la plupart des situations.

Jonas Byström
la source