Synchronization réseau
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Synchronization réseau
Voilà je prépare le game design document pour un jeu que je prépare et je bute sur un problème.
Voilà, mon jeu sera basé de deux clients dont l'un fera le serveur (jouable via le Net).
Comment lancer au même moment sur les deux postes le même message ?
Voilà, mon jeu sera basé de deux clients dont l'un fera le serveur (jouable via le Net).
Comment lancer au même moment sur les deux postes le même message ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Je réfléchis à cela depuis quelques heures déjà.
P1 et P2 sont les deux players.
P1 = 10h40
P2 = 9h30
NTP = 10h00
(sont vraiment pas à l'heure)
- P1 est le serveur
- P2 se connecte à P1.
- P1 et P2 se connectent à un serveur de temps pour avoir l'heure globale sur GreenWich.
- P1 et P2 font la différence avec l'heure sur leur poste. (P1 = +40 ; P2 = -30)
- P2 envoie à P1 la différence (=-30)
- P1 décide qu'à 10h05 (NTP) un message sera affiché !
-- Donc pour P1 (10h45).
-- NTP(10h05) + P2 (=-30) = 9h35
- P1 envoie à P2 : 9h35
- Ainsi à 9h35 pour P2 et 10h45 pour P1, un message s'affichera.
Est ce viable ?
Sinon comment l'améliorer ?
P1 et P2 sont les deux players.
P1 = 10h40
P2 = 9h30
NTP = 10h00
(sont vraiment pas à l'heure)
- P1 est le serveur
- P2 se connecte à P1.
- P1 et P2 se connectent à un serveur de temps pour avoir l'heure globale sur GreenWich.
- P1 et P2 font la différence avec l'heure sur leur poste. (P1 = +40 ; P2 = -30)
- P2 envoie à P1 la différence (=-30)
- P1 décide qu'à 10h05 (NTP) un message sera affiché !
-- Donc pour P1 (10h45).
-- NTP(10h05) + P2 (=-30) = 9h35
- P1 envoie à P2 : 9h35
- Ainsi à 9h35 pour P2 et 10h45 pour P1, un message s'affichera.
Est ce viable ?
Sinon comment l'améliorer ?
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Parce que il doit etre affiché au meme moment sur les deux postes !
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
- Progi1984
- Messages : 2659
- Inscription : mar. 14/déc./2004 13:56
- Localisation : France > Rennes
- Contact :
Disons qu'avec le lag réseau (jeu via Internet)... ils seront affichés avec qques secondes de différences.
Librairies & Applications : https://www.purebasic.fr/french/viewtop ... f=8&t=6220
Site Web : https://rootslabs.net
Site Web : https://rootslabs.net
oui c'est vrai que ce n'est pas simple.
tu pourrais peut etre utiliser la lib : K-NetLib - Multiplayer Library de Krylar's Kreations
elle est disponible pour PB3.94 et PB4.0.
http://www.krylarskreations.com/knl.shtml
http://www.krylarskreations.com/KNL_help/
sans avoir jamais testé cette lib, j'en ai entendu beaucoup de bien.
elle est spécialement dédiée au jeu en réseau à plusieurs joueurs.
si ca peut t'aider à ne pas réinventer la roue ou au moins à t'inspirer.
comme ils disent eux-même :
tu pourrais peut etre utiliser la lib : K-NetLib - Multiplayer Library de Krylar's Kreations
elle est disponible pour PB3.94 et PB4.0.
http://www.krylarskreations.com/knl.shtml
http://www.krylarskreations.com/KNL_help/
sans avoir jamais testé cette lib, j'en ai entendu beaucoup de bien.
elle est spécialement dédiée au jeu en réseau à plusieurs joueurs.
si ca peut t'aider à ne pas réinventer la roue ou au moins à t'inspirer.
comme ils disent eux-même :
traduction: tu vas économiser des mois de développement....You'll shave MONTHS off of your multiuser development cycle!
Faut p'tet pas abusé non plus... j'en avait fait une justement pour un ami qui utilise un autre langage, cela à du prendre une demi-journée pour écrire le squelette, puis une semaine pour les tests, et on avait un emplois du temps chargé. je comptais faire une userlib pour nous ici, mais c'était avant de perdre mon DDtraduction: tu vas économiser des mois de développement....

il y a quelques base à respecter en reseau concernant l'envois et la reception
- tout dabord, moi je "tag" tout mes messages, comme ca, à l'arrivé d'un message, grace au tag prédéfini par moi même il est aisé de traitré l'information.
- ne pas faire l'erreur d'envoyer des messages en temps réels quand il n'y en a pas l'utilitée , voyez pour un envois à intervalle regulier tout les 25,50,75 ms
- pour un jeu en ligne , un système de prédiction des positions est nécéssaire pour éviter une "vibration" de la position sur les clients.
c-a-d que j'envois juste l'état des touches du clavier, si le client A appuis sur avancer alors le serveur sait qu'il avance, si il relache il n'avance plus etc...
- faire une mise à jour des positions de tout les joueurs à intervalle régulier en parallèle du système de prédilection afin d'évité tout décalage de coordonées entre les pc
je m'étais fait une serie de fonctions pop/push, je m'explique, je créer un buffer vide, puis via des fct° comme PushFloat(Float.f) j'ajoute un float dans le buffer, après je peut faire un pushstring($) etc... puis un Sendmessage(TAG), il m'envois et vide le buffer, pareil pour la réception, j'avais créer un système performant de "file d'attente des messages"
j'avais un thread spécialement concu pour l'écoute et pour gerer l'arrivée des messages, un autre pour les traités.
Si j'ai le temps je me repenche dessus ^^
je vais quand même jeter un oeil à la lib du dessus voir se qu'elle offre

@++