2010-05-16 3 views
3

Je suis en train de coder un jeu simple que j'ai l'intention de faire multijoueur (sur le réseau) comme projet universitaire. Je considère deux scénarios pour la communication client-serveur:Jeux en réseau simples, planification de l'architecture client-serveur

La physique (ils sont triviaux, je devrais l'appeler "tests de collision" en fait :)) sont traitées sur la machine du serveur seulement. Par conséquent, la communication ressemble

Client1->Server: Pressed "UP" 
Server->Clients: here you go, Client1 position is now [X,Y] 
Client2->Server: Pressed "fire" 
Server->Clients: Client1 hit Client2, make Client2 disappear! 

serveur reçoit l'événement et il diffuse à tous les autres clients.

Client1->Server: Pressed "UP" 
Server->Clients: Client1 pressed "UP", recalculate his position!! 
[Client1 receives this one as well!] 

Lequel est le meilleur? Ou peut-être aucun d'entre eux? :)

Répondre

6

L'approche habituelle est d'envoyer ces informations:

  1. Lorsque le joueur est
  2. A quelle heure il est là (en utilisant notion interne de temps de jeu, pas nécessairement en temps réel)
  3. Le vecteur de mouvement du joueur (direction et vitesse)

Ensuite, les clients peuvent utiliser la navigation à l'estime pour estimer où se trouvent les autres joueurs, de sorte que la latence du réseau perturbe moins le jeu. Les mises à jour doivent être envoyées uniquement lorsque le lecteur change de direction ou de vitesse de déplacement (ce que les autres clients ne peuvent pas prévoir), de sorte que la bande passante du réseau sera également sauvegardée.

Voici quelques liens sur la navigation à l'estime. Les mêmes sites Web contiennent probablement aussi plus d'articles à ce sujet. http://www.gamasutra.com/view/feature/3230/dead_reckoning_latency_hiding_for_.php http://www.gamedev.net/reference/articles/article1370.asp

2

Je pense que la première approche est meilleure. donc vous avez des données égales sur tous les clients.

Lorsque la physique est simple et que les résultats des calculs sont toujours les mêmes, la deuxième approche est également acceptable. mais s'il y a des nombres aléatoires possibles, vous aurez des effets différents sur tous les clients.

+0

qui était ma première pensée, mais je me suis aperçu que je vais avoir besoin de mettre à jour tous les clients très souvent de garder les mouvements lisses (chaque personnage se comporte comme une balle en caoutchouc: rebondissement, se déplaçant rapidement dans des directions différentes etc). – migajek