Probleme de conception réseau

Probleme de conception réseau - C#/.NET managed - Programmation

Marsh Posté le 06-01-2010 à 18:50:40    

Bonjour a tous. Afin d'avoir le plus de réponse possible, je copie ici mon message posté sur un autre forum, en esperant avoir des réponses !
 

Citation :

Bonjour a tous.
Si certains ont déja lu quelques messages de moi, ils savent que je suis actuellement avec un groupe de projet de 4 personne, en train de coder un ShootEmUp en multijoueurs. Les autres ne le savaient pas, ils le savent maintenant  
 
Cela dit, nous rencontrons un énorme probleme de conception réseau en ce moment, et nous bloquons un peu.
 
Actuellement, nous possédons un ShootEmUp en 2D, qui marche, avec des ennemis ( maximum de 1000), un boss, des projectiles, des trajectoires, des positions, tout qui va bien.
Notre réseau marche de même en local ( et sur deux machines d'un réseau local), certes avec quelque ralentissement du jeu, mais il marche ( sans doute parceque nous avons choisit d'utiliser le protocole TCP et non UDP, mais la n'est pas le probleme).
 
Actuellement, les envois sont petits. Nous envoyons un string contenant l'appui des touches par le player, traités a l'arrivée comme si les touches étaient appuyées. Cependant, a cause du lag, il se peut qu'un des joueur evite un ennemi, mais que l'info arrivant plus tards sur l'autre soft, la vie soit décompté.
 
Nous nous demandions alors comment marchaient les jeux plus évoluées, et si elles envoyaient directement les positions ( puis les affichaient) réduisant ainsi le nombre de calculs. Mais chez nous, avec 1000 ennemis ( soit 2 int par position, 2000 int *4 bit, on arrive, RIEN que pour les ennemis a 8Kb envoyés/recus par update. Nous aimerions avoir un minimum de 30fps, ce qui ramene a 240Kb en envoi/reception, ce qui me parait énorme ( et encore, on envoi pas les positions boss/player ni les projectiles.
 
Auriez vous une idée de comment on pourrais s'en sortir svp ?
(Dans le cas contraire, seriez vous au courant de la méthode qu'utilisent les jeux plus évolués pour envoyer leur paquets ?)

Reply

Marsh Posté le 06-01-2010 à 18:50:40   

Reply

Marsh Posté le 07-01-2010 à 17:36:09    

outre la compression, j'ai deux trucs à dire :
-> Les énemis, c'est quoi ? Des trucs générés par le jeu ? Ou des players ?
Si ce sont des trucs générés par le jeu, alors c'est bien simple, vous n'avez ABSOLUMENT pas à communiquer cette information par le réseau !!!!!!!!!!!
=> Le client "maître" crée un SEED pour toutes ses fonction RANDOM, et le communique à tous les clients "slave". Ainsi, les mêmes séries RAND() seront générées quelles que soient les machines.
Donc ça vous fera 240 Ko de moins à échanger pour rien.

 

Ensuite, les lags, ça arrive toujours, donc deux choses :
=> En cas de désynchronisation (vérification que le client génère le même rand que le serveur à interval régulier), il faut planter le client, ou tenter de le resynchroniser complètement (renvoi du seed après lui avoir envoyé l'ensemble des positions de tous les éléments du jeu - obligé de mettre tout le monde en pause pendant ce temps)
=> Vous ne devez envoyer la position que des joueurs, et ne pas calculer les collisions sur les autres clients : vous vous contentez d'afficher le résultat des calculs des machines clientes dans ce cas.

 

Logiquement, vous allez passer à quelques ridicules Ko par seconde, sans même vous poser la question de la compression.

 

=> Le coup du SEED, je le sors d'un vrai jeu qui existe vraiment et qui fonctionne très bien. Il y a peut-être mieux, mais en tout cas, ça a le mérite de très bien marcher et d'être éprouvé http://www.openttd.org/en/


Message édité par MagicBuzz le 07-01-2010 à 17:40:59
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed