CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Architecture client/serveur

shinigota
shinigota
Niveau 10
06 septembre 2015 à 18:00:55

Salut !

Je suis en train de créer un jeu de survie multijoueur en 2D en java. Le but final serait de survivre le plus longtemps à des vagues d'ennemis.
Un screen sera sans doute plus parlant :hap:
https://image.noelshack.com/fichiers/2015/36/1441553357-screen.png

C'est la première fois que je fais de la prog réseau, et donc j'ai quelques questions à propos de l'architecture client/serveur et celle d'un jeu, modèle/vue.

En fait j'arrive à un point où je sais vraiment pas à quel endroit je dois mettre à jour mes entités.
Est-ce que c'est le serveur qui doit tout mettre à jour ou le client doit aussi actualiser mes entités ?

En l’occurrence pour le premier cas, le serveur doit tout mettre à jour :
Ca voudrait dire que lorsque je me déplace, quand j'appuie sur ZQSD donc, je demande en fait au serveur de me déplacer, ce qu'il va faire, puis il enverra à tous les clients , y compris moi, ma nouvelle position ?
Ou alors, second cas et quand j'appuie sur les touches je me déplace réellement côté client, et je vais envoyer au serveur ma nouvelle position.

Actuellement j'ai un peu des deux, l'IA est mise à jour côté serveur et la position de chaque joueur côté client. Du coup j'ai des mises à jour des deux côtés et ça me semble pas propre :hap:
Puis le serveur est assez gourmand et utilise 40/50% de mon proco (i5 de portable assez costaud, 4200h). Ca me semble énorme pour un jeu 2D, quoique une IA c'est assez lourd (pathfinding A*), mais quand je vais rajouter le reste ça risque de lag et ramer sévère...

Je vais bientôt arriver à l'ajout du système de vie et de tir, et actuellement je sais pas vraiment comment je dois m'y prendre.
Est-ce que quand le joueur tir, il créer ses propres projectiles, les met à jour (tout côté client donc) et envoie les coordonnées au serveur pour que les autres clients reçoivent les infos ?
Ou alors quand je tir, je demande en fait de tirer, donc le serveur va créer les projectiles, les mettre à jour et envoyer les données aux clients ?

Pareil pour la vie. Chaque joueur met à jour sa vie ou c'est le serveur qui détecte si les joueurs se font toucher par les ennemis et donc met à jour les vies des joueurs :(

J'aurais tendance à mettre à jour la plupart des entités côté serveur, gérer le déplacement du joueur côté client mais actuellement rien qu'avec l'IA c'est assez pompeux. Et à partir d'un certain nombre d'ennemis, on ressent du lag. Pourtant il me semble que le pathfinding A* est pas spécialement lourd :(

Bref, si quelqu'un aurait quelques infos sur une architecture client/serveur pour un jeu, ça serait vraiment génial :oui:

Merci d'avance, et bonne fin d'aprem ! :)

Chnapy
Chnapy
Niveau 10
06 septembre 2015 à 18:14:39

Déjà pour les déplacements je te conseille de faire comme ça :

Le joueur appuie sur ZQSD, le client vérifie si le perso peut bouger : non -> il fait rien, oui -> déplacement du perso coté client, envoi au serveur de l'action.
Le serveur vérifie si l'action est possible, si oui -> il actualise la position du perso coté serveur, et envoi sa position à tout les clients, si non -> il envoi le refus au client en question qui annule l'action.

Utilise le même système pour les tirs. Le client tire, envoi la pos du tir + l'angle du perso au serveur, le serveur vérifie et envoi aux autres clients.

Utilise un système d'interpolation afin de compenser les lags.

shinigota
shinigota
Niveau 10
06 septembre 2015 à 18:30:36

Merci de ta réponse :oui:
Pour les mouvement, comment ça je dois vérifier que l'action est possible côté serveur ?
En fait quand j'appuie sur ZQSD, je modifie la vitesse du joueur. Quand il est mis à jour je vérifie en même temps s'il y a collision ou non et je re-modifie sa vitesse, toujours côté client.
Du coup je vois pas comment je peux valider le mouvement côté serveur, vu que dans mon cas il est forcément validé quand le joueur bouge, côté client :(

Après pour les tirs je vais les faire de cette manière :)

Pour l'interpolation je connaissais pas, merci :oui:

Comme ça, ça à pas l'air bien vilain à mettre en place.
J'imagine que par exemple quand un joueur ou ennemi se déplace, j'envoie aussi sa vitesse (un vecteur qui comprend aussi l'angle dans mon cas). Et côté client je dois actualiser le mouvement avec la vitesse reçue. Comme ça si il y a du lag et disons que le serveur répond pas pendant une fraction de seconde, les ennemis et les joueurs devraient continuer à se déplacer vers leur dernière direction :(

Merci encore :oui:

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de Jeux
  • Programmation
  • Création de sites web
  • Linux
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment