IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Gestion clavier souris en multijoueurs


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut Gestion clavier souris en multijoueurs
    J'ai un souci de conception: Je ne sais pas comment gérer les évènements claviers et souris pour un jeu multijoueur!

    Quelle est la méthode la plus répandue pour gérer ces évènements?

    En ce qui me concerne, je m'en sors lorsque le nombre de PJ est 1.

    Je dessine tout sur un canevas. Ce canevas implémente les écouteurs claviers et souris. Les fonctions ont été developpées pour répondre aux mouvements du joueur, représenté par un sprite.


    Merci pour vos réponses!

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    349
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2005
    Messages : 349
    Points : 379
    Points
    379
    Par défaut
    Tu parles de jeux à plusieurs joueurs sur le même ordinateur?

  3. #3
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    non, un par poste pour le moment, mais j'aimerai également savoir comment faire si plusieurs PJs sont sur un même poste

    merci!

  4. #4
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    bon, ben dommage..., merci quand même!!

    @ bientot!

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Quelle patience

    non, un par poste pour le moment
    Donc en clair, on parle réseau là. Ce que tu veux c'est savoir comment gérer les évènements à travers ton architecture client / serveur ? Ou bien carrément pas ?

  6. #6
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Désolé pour mon impatience... Je pensais que cela n'interessait que moi...
    Mes excuses.

    Dans mon appli multi-joueurs, il y'aura un sprite par joueur (le représentant) et un ensemble de sprites pour le décor et les PNJs.

    Quand j'actionne la touche clavier pour déplacer mon personnage vers le haut, comment savoir lequel déplacer? Il n'est pas envisageable de bouger tous les sprites PJ!

    De plus, quelle est la meilleure solution pour envoyer au serveur le fait que mon perso vient de se déplacer vers le haut? (pour le moment, chaque client teste la commande reçue avec chaque constante définissant un mouvement réalisable) dans le genre:

    receiveMessage(chaine message) {
    si message == "_BOUGER_HAUT" alors ... {quel sprite bouger?}
    si message == "_BOUGER_BAS" alors ... {quel sprite bouger?}
    si message == "_ACTION_1" alors ... {quel sprite bouger?}
    ...
    }

    Enfin, chaque joueur peut avoir des caractéristiques différentes... Comment mettre au courant l'ensemble des joueurs de ces modifications? Par exemple, dans mon application, chaque joueur peut, avec un ensemble de bonus, modifier sa vitesse de mouvement. Comment avertir les autres que je me déplace plus vite?


    Ce sont des problèmes de conception lors du passage mono-joueur au multi-joueur. C'est peut être évident pour vous, qui êtes professionnels, mais je suis bloqué. Je ne veux pas coder comme un porc, je veux passer par une phase d'analyse et je code seulement après avoir trouver une solution optimale et réutilisable dans le futur dans un autre projet.

    Merci d'avance,

    Respectueusement,

    Billy

  7. #7
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    La solution la plus naïve et la généralement la plus facile à mettre en place dans un premier temps est le modéle maître-esclave.

    Tu définis un serveur de jeu qui va centraliser toutes les informations.

    Ensuite chaque joueur va envoyer les informations de mouvement de son client vers ce serveur et le serveur propage l'information.

    Ensuite les choix changeront les rôles de chaque processus :

    - Gestion du mouvement chez le client ou non (le serveur peut-être le seul à connaître la correspondance entre les clients et leur joueur, cela se fait facilement, le client envoit simplement la position de la souris et avec la correspondance, le serveur met à jour la position du perso correspondant)

    - Gestion des collisions simples chez le client ou non (allége le travail du serveur)

    - Interpolation/Prédiction de la position des autres sprites (permet de ne pas avoir à envoyer un message par frame mais juste de temps en temps pour vérifier si la prédiction s'est bien passée)

    - Gestion des caractéristiques chez le client ou non (trou de sécurité si c'est chez le client...)

    etc.

    Jc

  8. #8
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    billynirvana, un retour ?
    Tu as compris, il te manque des informations ?

  9. #9
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Bah oui en fait
    Je ne suis pas encore au problème d'envoi des données entre client et serveur: Je suis pour le moment à structurer de mes objets avant implémentation...
    Pour le moment cela ressemble à

    Joueur {
    idJoueur:int
    positionX:int
    positionY:int
    action:string
    }

    Au début j'étais parti sur le principe du chat en envoyant un message structuré. J'ai finalement choisi la sérialisation d'objet.

    Sinon, je suis pour le moment sur un chtit problème d'algorithme sur la détection du type de collision entre sprites

  10. #10
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Citation Envoyé par billynirvana
    action:string
    Je ne sais pas si c'est le plus judicieux. Même si l'on est peut-être plus à ça prêt une chaine est longue à comparer et à tranmettre. Traditionnellement on fait ça avec une énumération (et ça marche même avec Java 5).

  11. #11
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Ah bon!! Qu'entends-tu par "énumération" ?

    Dans mon, cas les genres de classes transférées des clients vers le serveur (le serveur est lui meme un client) sont:

    Joueur {
    idJoueur:1
    positionX:100
    positionY:100
    action:"deplacer_haut" <-- c'est une constante!
    }

    ou

    Joueur {
    idJoueur:2
    positionX:150
    positionY:300
    action:"deplacer_gauche" <-- c'est une constante!
    }

    Comment faire pour corriger cela avec ton énumération?

  12. #12
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    Comment as-tu deviné que c'était en JAVA ?

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il vaut mieux envoyer une constante (avec 1 octet tu en as 255 possibles) qu'une chaîne (1 octet par caractère).

    Il faut donc que tu définisses des constante du style

    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    // S'il y a un type plus petit que int en java utilise le (me rappelle plus)
    static final int deplacer_haut = 0;
    static final int deplacer_bas = 1;
    ...

  14. #14
    Membre confirmé Avatar de billynirvana
    Homme Profil pro
    Architecte technique
    Inscrit en
    Décembre 2004
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2004
    Messages : 472
    Points : 552
    Points
    552
    Par défaut
    bien vu!Je vais changer le type de action en constante. Le plus petit est byte

    PI:

    byte : 8 bits -128 , 127
    short : 16 bits -32768 , 32767
    int : 32 bits -2147483648 , 2147483647
    long : 64 bits -9223372036854775808 , 9223372036854775807

  15. #15
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Comme les JV sont souvent en C[++], on utilise le mot clef "enum" qui associe des labels bien lisibles et des entiers pour un code efficace. Ca a aussi l'avantage d'être typé donc on ne peut pas utiliser une valeur d'un autre type ou inexistante.

    En Java (c'est le "sérialisation" qui ma mis sur la piste ; Java n'est généralement pas bien loin) on a été longtemps réduit à la syntaxe proposée par Laurent Gomila. D'ailleurs une convention assez courante veut que l'on mette les constantes définies en majuscules pour bien les identifier. Depuis Java 5 on dispose aussi du mot clef enum qui fait comme en C et même plus (http://java.developpez.com/faq/java/...ns#NOTION_enum).

  16. #16
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Citation Envoyé par Sivrît
    D'ailleurs une convention assez courante veut que l'on mette les constantes définies en majuscules pour bien les identifier.

    en effet, c'est ce qui est marqué dans la convention de codage officiel de chez SUN, donc forcement, on risque de la retrouver en java (d'ailleurs, quand on regarde les source des API Java, on s'appercoit qu'ils ne respectent pas toujours leur propre convention )

Discussions similaires

  1. Gestion "clavier/envoi vers le serveur" en multijoueur
    Par hedo888 dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 20/04/2007, 10h27
  2. [GLUT] Gestion clavier, touches concurentes
    Par djfab dans le forum OpenGL
    Réponses: 9
    Dernier message: 04/05/2005, 00h25
  3. [Delphi]Gestion Clavier
    Par Dr@ke dans le forum GLUT
    Réponses: 2
    Dernier message: 26/02/2005, 14h13
  4. Gestion evenement souris
    Par Bugmaster dans le forum Agents de placement/Fenêtres
    Réponses: 15
    Dernier message: 30/07/2004, 08h40
  5. Clavier / Souris Sans Fil problème installation
    Par Harbaingan dans le forum Matériel
    Réponses: 3
    Dernier message: 17/05/2004, 17h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo