non ced, ton pc est pourri comme le miens ^^
Quel certitude !!!! Je ne freeze absolument pas
je te retourne ta certitude, tu postes ton jeu, c'est pour avoir des retours, depuis le début tu remet en question nos pc & nos connexions, je te concède que la mienne est pourrie mais elle ne m'empêche pas de regardé du streaming ou de jouer à Battlefield 3 & 4 à 64 joueurs...
donc , en tant que programmeur , je dis que c'est ton programme qui à un problème, pas nos pc.
De plus comme je te l'ai déjà dit, un jeu en réseau qui à un "serveur" de jeu uniquement basé sur sql ça n'existe pas, mis à part ton programme, le fait d'envoyer la position tout les 1500ms c'est comme si tu jouais à bf3 avec un ping de 1500... c'est injouable. autant faire une communication via des boites mail , le résultat sera le même.
un reseau pour le jeu , dois être sous cette forme :
C'est une topologie étoilée.
Seul le serveur simule le jeu, c'est lui qui prend toute les décisions concernant le jeu, qui fixe les règles, qui dit qui est mort, qui vit, etc...
le serveur envois "des images" à un temps fixe ( tout les 15ms environ ), dans l'image & dans ton cas, il pourrais y avoir une direction ( la vitesse est fixe on ne l'envois pas ) , une position, l'état du joueur ( si il avance , si il tourne , une sorte de keymapping quoi )
le message pourrais donc prendre cette forme : [IDENTIFIANT] [TEMPS SERVEUR] [NUMERO DE PAQUET] [ID JOUEUR][DIRECTION] [POSITION] [KEYMAP]
- [IDENTIFIANT], c'est le byte que le serveur met en début de message, cela sert au client à identifier le type de paquet & ainsi connaitre la suite des données à extraire
- [TEMPS SERVEUR] , sert à synchronisé les client au serveur
- [NUMERO DE PAQUET] , sert surtout à l'interpolation entre les différents paquets & à voir si il y a des pertes de connexion , si le serveur recois le paquet 8 et qu'ensuite il recois le paquet 20, ca ne sert à rien de faire une interpolation entre le 8 le 20, on cale directement le client sur le 20 , on attend le 21 & on interpole
- [ID JOUEUR], le joueur concerné
- [DIRECTION] , la direction est un vecteur 3D ( x , y , z ) , la vitesse étant fixe elle n'est pas envoyé aux clients, la nouvelle position est défini par maPosition = maDirection X vitesse
- [POSITION], idem que la direction , un vecteur 3D
- [KEYMAP] , peu être un type à 8 bits, chaque bit peu stocker un état , une touche enfoncé , avance, tourne à droite, gauche , recule, avec le "bitshifting" on extrait facilement les informations voulue.
un message comme cela fait environ 38 octets
pour 16 joueurs 608 octets
par seconde avec un tick de 20ms par exemple : 30400 octets par secondes, ca c'est la partie serveur qui envois.
le client envois son état local uniquement, encore plus léger.
Quand tu auras mis tout cela en place, tu pourras t'occuper de la prédiction de mouvement & de l'interpolation & tu pourras critiquer nos pc & nos connexions aussi pourrie soient elles, mais pas avant. il faut savoir accepter quand on se trompe.