Bonjour à tous,
venant de terminer à grand peine la première étape de mon projet de jeu, je vais bientôt commencer à plancher sur la deuxième partie mais un problème de taille se pose: je n'ai jamais utilisé de moteurs graphiques.
Afin de vous permettre de me répondre en connaissance de cause, je vais brièvement exposer mon projet.
Il s'agit d'un RPG online temps réel, architecture client-serveur bien sur.
Actuellement l'implémentation est simple.
La connexion ne pose aucun problème et lancera une classe héritant de Thread appelée ConnexionThread qui lui-même lancera une classe héritant de JFrame appelée JeuFrame.
La JeuFrame est pourvue d'un gestionnaire de clavier (extends KeyListener) qui s'occupe de transformer les divers événements claviers en Msg devant être envoyés au serveur via le ConnexionThread.
Le ConnexionThread recoit fréquemment des informations de la part du serveur, qu'il envoit à la JeuFrame devant les gérer.
Ces événements sont de deux types:
* L'entrée ou le départ d'un autre personnage de votre zone de visibilité
* Un événement signifiant qu'un personnage (le votre ou un autre) se déplace en telle position
Jusque là, rien de bien sorcier donc.
Mais le problème est de taille lorsqu'on s'attache au comportement actuel de la JeuFrame, ou plus exactement du JeuPanel qu'elle contient.
En effet, ce JeuPanel (extends JPanel donc) recoit tous les événéments.
Il stocke et maitient à jour en permanence la description des personnages actuellement visible par le votre. (le détail est sans importance)
A chaque événement de déplacement d'un personnage, il agit de la sorte:
SOIT il s'agit de votre personnage
=> il met à jour ce qui est considéré comme le centre du panel, à savoir votre position et réaffiche tout (la map centrée en votre personnage, votre personnage et ceux qui lui sont visibles)
SOIT il s'agit d'un autre personnage
=> il fait pareil (je sais, j'aurais du faire en sorte de ne redessiner que la partie qu'il occupait avant et celle qu'il occupe actuellement)
Les événements de déplacements étant sensé être très fréquent (à la base, c'est quand même un jeu multi-joueur espérant se doter d'une panoplie de monstres mobiles), le nombre de réaffichage via la méthode repaint() est considérable.
J'ai un peu lu des documents sur le buffering, double buffering, sur la méthode update etc.... mais je sens qu'il ne s'agira que d'une améliration mineur et je pense vraiment que mon modèle actuel se prêterait facilement au couplage avec un moteur 2D (même si je n'y connais rien, j'ai comme un présentiment).
J'ai donc fait un petit tour sur google mais je n'y ai pas vraiment trouvé mon bonheur.
Je m'adresse donc à vous en espérant que vous pourrez me mettre sur la voie d'un moteur 2D (à la rigueur 3D mais beaucoup de complexité au service d'un gain de dimension non utilisé... :s) qui vous semblerez efficient.
J'espère ne pas avoir fait trop court ni trop long.
Merci à ceux qui m'auront lu![]()
Partager