En quoi consiste la création d'un jeu de plateforme multijoueur en temps réel?


13

Je suis en train de créer un jeu de plateforme qui a une fonctionnalité "coopérative" sur laquelle j'aimerais travailler sur les réseaux / Internet.

Maintenant, j'ai lu sur la programmation de jeux en réseau, y compris des articles comme Ce que chaque programmeur doit savoir sur la mise en réseau de jeux et je comprends donc la différence entre des techniques telles que le verrouillage de pair à pair et les architectures de prédiction serveur-client:

  • J'ai conclu que pour tout jeu en temps réel qui va être joué sur Internet, le verrouillage par les pairs n'est tout simplement pas une option.
  • Je suis également préoccupé par le fait que même pour un jeu de plateforme, une architecture client-serveur simple (sans une sorte de prédiction client) entraînerait une dégradation du gameplay en raison du délai entre l'action et la réaction causé par un aller-retour vers un serveur. (Cela dit, je veux éliminer le besoin d'un serveur central, et donc seul un des joueurs, le client, connaîtra réellement ce décalage).

Cela laisse la prédiction client, mais même pour un jeu simple comme un jeu de plateforme, cela semble toujours assez complexe.

Comment pourrais-je créer un système prédictif client fonctionnel pour un jeu de plateforme multijoueur?


1
Une chose dont vous aurez beaucoup moins à vous soucier dans un jeu coopératif est la triche;)
Jonathan Connell

J'ai signalé cela comme non constructif. Les questions posées ("Quel est le travail pour écrire un jeu en réseau qui utilise la prédiction client? Vais-je finir avec la moitié de ma base de code composée de code de réseau?")) Sont beaucoup trop larges et ne sont pas du tout spécifiques à un problème. La réponse serait essentiellement "ça dépend", ce qui n'est pas une bonne réponse.
TravisG

-1, "Combien de travail" est subjectif.
Tetrad

1
La quantité de travail n'est pas subjective en tant que telle, mais elle dépend de quelques facteurs (taille du jeu, exigences de précision, etc.), ces facteurs peuvent affecter si c'est beaucoup de travail, un peu de travail ou quelque part entre les deux (bien que quel type de travail est une meilleure question); cependant, je pense que l'OP demande vraiment combien d'efforts sont nécessaires et quelle taille une partie de la base de code de ce type de code serait. Telle qu'elle est libellée, elle peut être trop large. J'ai choisi une interprétation plus étroite et y ai répondu. Je pense que le PO devrait faire un peu plus d'efforts pour limiter les questions à quelques points très spécifiques.
Nate

@Tetrad Désolé - j'ai essayé de rendre cette question aussi objective que possible, mais ma question se résume à "est-il difficile de créer un système prédictif client fonctionnel pour un jeu de type Y" - sinon, j'apprendrai comme je allez, mais mon temps est limité, donc apprendre trop de travail après X jours de jeu est trop tard. J'essaierais de fournir plus de détails sur Y, mais je ne veux pas rendre la question "trop ​​localisée". Le problème principal ici est le mouvement, qui est commun à tous les plateformes (je veux que les autres trouvent cette question utile). Si je peux améliorer cette question, les suggestions sont appréciées.
Justin

Réponses:


5

Je ne pense pas que la moitié de votre base de code se transformera en code réseau si vous décidez de mettre en œuvre une telle fonctionnalité.

À mon avis, la façon la plus simple de le faire est de configurer un serveur "central" (même si cela signifie qu'un joueur "héberge" le jeu puis se connecte à son propre serveur) qui accepte toutes les entrées de l'utilisateur le plus rapidement possible et le renvoie à chaque client.

Sur le client, vous ne l'implémentez pas différemment que si vous faisiez un jeu coopératif pour deux joueurs localement, sauf que vous lisez P1 à partir du clavier et P2 à partir du réseau.

Vous aurez besoin que le serveur envoie un état de jeu complet de temps en temps, et les deux clients peuvent soit basculer vers le nouvel état autoratitave à partir du serveur, soit glisser dans le nouvel état (en quelques secondes). À moins que vous n'ayez une horrible perte de paquets ou des tonnes de clients par serveur, cette approche devrait suffire à la situation que vous décrivez.


Ce qui est à peu près aussi simple qu'une approche client-serveur (sauf qu'un client héberge le serveur -> vous n'avez pas besoin d'un serveur dédié mais vous devez aller avec quelque chose de ligne UDP + NAT Punchthrough qui a de toute façon besoin d'un serveur dédié). Deuxièmement, vous proposez la méthode lockstep (comme vous parlez d'envoyer des gamestates complets), ce n'est pas, à mon humble avis, la meilleure méthode si le jeu fonctionne sur Internet (il est probablement sur LAN cependant) où le client-serveur est beaucoup plus facile implémenter.
Valmond

1
Non, je suggère que vous envoyiez occasionnellement des états de jeu complets, afin que le client puisse s'assurer qu'il n'est pas trop éloigné.
Nate

2

J'ai un jeu de style mMORPG entièrement fonctionnel avec prédiction client (le jeu est loin d'être terminé mais il fonctionne `` OK '') et j'ai quelque chose sur 40000 lignes de code pour le serveur et le double pour le client (ajoutez le même montant pour les outils, etc. .). La prédiction n'est probablement pas supérieure à quelques centaines de lignes (si même cela) et l'ensemble du réseau se compose de quelques milliers de lignes mais pas plus de 5.000 (cela dépend un peu de l'endroit où vous tracez la ligne).

Question floue réponse floue ;-)


2

Une proportion importante du code de réseau peut être indépendante du jeu auquel vous jouez. Pour cette raison, et parce que vous êtes nouveau dans le réseautage, la première chose que je vous suggère de faire est de trouver des bibliothèques qui feront ce travail pour vous. RakNet par exemple.

Une chose que vous voudrez dans votre code de jeu est la possibilité de gérer plusieurs états de jeu différents, que vous pouvez utiliser pour l'interpolation et la prédiction. C'est assez simple à concevoir à l'avance, mais cela peut représenter une quantité de travail importante si vous modifiez un jeu solo existant.

Notez également que si vous voulez que des étrangers jouent à un jeu de pair à pair sur Internet, vous aurez probablement besoin d'au moins un serveur quelque part qui gère le lobby / le matchmaking.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.