el muchacho Comfortably Numb | blooddevil a écrit :
pegasus, imagines que j'ai un jeu de vaisseau dans l'espace avec un plan 2D et qu'il soit possible de jouer à 2joueurs simultanément en réseau local ou par internet grace au protocol UDP. imagines que j'utilise ton systeme(qui me parait pas mal d'ailleurs). lorsqu'un des joueurs va vouloir tirer, le temps que l'information remonte au serveur puis arrive au client, voire meme le temps que l'information parte du client pour aller vers les autres clients(en imaginant que c'est une information importante et qu'elle peut couper le passage par le serveur), il y aura quand meme un décalage par rapport aux 2écrans, je me trompe? comment faire par exemple pour que les 2missiles soit vraiment synchronisés, car cela peut ensuite poser un probleme par rapport à des vaisseaux ennemis, le missile sur l'écran du lanceur va tuer l'ennemi de tres peu, et comme sur l'autre écran(du 2eme joueur) y a un petit décalage, il va rater l'ennemi... tu vois ou je veux en venir? comment fais tu pour compenser ca? car je suppose que la dessus, meme en faisant une prédiction grace à des vecteurs, cela ne permet pas de deviner qu'un des 2 joueurs va tirer... à moins que tu décides de griller les premieres positions du missile, quand il est créé sur l'écran 2. si tu pouvais m'éclairer
|
Tu devrais lire qqs articles sur le netcode dans les jeux en temps réel, c'est délicat et il n'y a pas 36 manières de le faire correctement.
Mais pegasus a raison, ce n'est pas (seulement) les positions que tu dois envoyer sur le réseau, mais les informations cinématiques qui permettent d'extrapoler le mouvement des divers objets pendant le laps de temps où tu n'auras plus d'information. Et c'est là que tu dois t'intéresser aux méthodes d'intégration du mouvement qui donnent les résultats les plus précis pour éviter d'être trop à coté de la plaque si le réseau "lagge". Il y a bcp bcp mieux que l'intégration d'Euler, qui est le calcul du mvt le plus simple, comme la méthode de Verlet ou de Beeman.
http://en.wikipedia.org/wiki/Time_integration_method
http://www.gamedev.net/reference/p [...] es/verlet/
Il y a une liste d'articles ici: http://www.gamedev.net/reference/l [...] yid=30#168
http://www.flipcode.com/articles/network_part07.shtml
Citation :
quand par exemple le jeu doit créer un ennemi, ou qu'un ennemi utilise un algo pour se déplacer, comme A*, ou sont fait ses calculs? sur le serveur? donc toutes les unités, objets sont instanciés sur le serveur aussi afin qu'il traite les données? donc en gros le client instancie toutes les unités et objets coté client sauf qu'en gros ils sont creux(j'entends par la qu'ils n'ont pas de calculs), ils sont affichés à telles coordonnées à tel instant, en gros c'est une sorte de "vue" du serveur à un instant donné?
désolé de te faire chier avec autant de questions a la con mais j'aime bien avoir quelque chose de parfait ou s'y approchant et j'aime bien tout controler
|
Généralement, le mieux, c'est que les calculs soient effectués sur tous les clients, le serveur ne servant qu'à synchroniser et à s'assurer qu'il n'y a pas de désynchro au niveau des clients. Le serveur est le chef d'orchestre, c'est lui qui dirige en envoyant un signal de tempo, le "heartbeat", et les clients jouent ensemble en calculant toutes les positions chacun de son coté, sachant que le tempo doit être identique pour tout le monde. Le serveur n'a qu'a vérifier que tout le monde est synchrone. C'est en tout cas comme ça que c'est fait sur TA Spring. Et ça marche. Spring n'a pas besoin d'être aussi rapide qu'un FPS, mais par contre, il y a sans doute bcp plus de données échangées, car ce n'est pas quelques acteurs qu'il faut synchroniser, mais des milliers. Je ne connais pas dans le détail la procédure de rattrapage quand l'un prend du retard sur les autres par contre. Mais si le lag est trop important, ou pire, si ça bugge chez l'un des joueurs, c'est foutu. Message édité par el muchacho le 27-07-2006 à 23:07:02 ---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
|