Salut a tous,
Je vous avais déjà demandé des conseils et je reviens après avoir un peu cogité sur le sujet.
Je désire réaliser un moteur de jeu, mais pas pour un jeu en spécifique, d’où mon problème d’une architecture assez souple.
Après conseil de Ash.Ice.Loky j’en suis arrivé à la conclusion suivante :
Une classe Moteur (FAIT – en cour) :
C’est en faite un pattern Façade permettant d’accéder a toutes les fonctions du moteur (son, affichage, I/O, …).
Ressources (FAIT)
Une succession de classes suivant le pattern Factory pour la gestion des ressources automatiques (textures et sons).
ENTRE_SORTIE (FAIT – en cour)
Singleton redirigeant les entrées vers (touche, souris, …) vers des fonctions spécialisé pour simplifier le développement.
MAP - SPRITE – AFFICHAGE
La j’ai un problème.
Je ne sais pas du tout comment faire pour gérer tout ce petit monde.
J’avais pensé à l’architecture suivante :
Infos : <- signifie que cette classe est contenu par la première.
DECOR (gestion du décor, le fond) <- Couche[] ; Camera
COUCHE (une couche ou layer, permet la superposition) <- Tile[][]
TILE (une portion de l’écran, associé à un tile d’un tile set) <- Affichage
CAMERA (gère le focus sur une partie du décor)
AFFICHAGE (fonction pour afficher une portion de textures)
SPRITE (texture simple, fixe ou animé, de taille différentes) <- AFFICHAGE
AFFICHAGE (fonction pour afficher une texture simple).
Ash (que je remercie ;-)) m’a conseillé de faire de en sorte qu’une classe soit minimale, mais réutilisable (par exemple Affichage) afin de permettre de faire autant des RPG que des Pong.
D’éviter l’héritage au profit de la composition. Donc de ne pas faire une fonction dans Affichage qui soit de cette facon :
Afficher (MAP) ou Afficher (Couche), mais Afficher (posX, posY, GLuint), appelé dans une fonction membre de Tile qui ressemblerais a ca Afficher () {Afficher (posX,posY,Texture)}
Puis une fonction Afficher dans Couche qui appelle Afficher pour chaque Tile, puis une fonction Afficher dans Map qui appel Afficher pour chaque Couche.
Je voudrais donc avoir plusieurs avis sur ce type de conception, je ne m’y connais pas donc j’aimerai progresser et plusieurs avis sont toujours bons à prendre.
Un dernier point qui me chagrine c’est le nombre d’appel à « glBindTexture » avec cette technique, mais je n’ai pas trouvé comment résoudre ce problème.
Peut être en mettant l’afficheur dans MAP ou COUCHE et non dans TILE ?
Partager