[c++]Architecture des classes pour un jeu
Tout d'abord bonjour :)
Je programme actuellement un jeu en opengl en c++.
J'avais commencé à le programmer à la bourrin histoire d'avoir un squelette qui tourne sans me preocupper des classes.
Maintenant je reorganise entierement mon code avec des classes pour avoir un truc à peu pres propre.
Pour l'instant en gros j'ai ca :
classe GameEngine ( 1 seule instance)
| classe Hero
| classe PhysicEngine
| classe GraphicEngine
| ...
( en gros hein, c'est pour simplifier :) )
les classes physicEngine et graphicEngine decrivent bien ce qu'elles font je pense ;)
La classe hero contient la position, l'angle, la vie etc...
Mon probleme est le suivant : j'ai besoin d'utiliser la classe hero ( entre autre ) dans le moteur physique ( pour les collisions ) et pour le moteur graphique ( pour l'afficher forcement ^^ )
Est-ce que ca veut dire que j'ai mal organisé mes classes? En principe une classe devrait etre fonctionnelle seule, enfin c'est du moins ce que j'ai appris :)
J'ai pensé rajouter une classe ObjetsCommuns dans le GameEngine, et passer un pointeur vers l'instance à mes 2 classes Graphic et physique, est-ce la meilleure chose à faire? je ne vois que ca pour l'instant :/
Voila, j'ai besoin de conseils pour l'organisation de mes classes, j'aimerai pas m'embarquer sur cette voie si c'est la pire des choses à faire ;)
Merci d'avance :)
[Déplacé par King Kaiser]
Re: [c++]Architecture des classes pour un jeu
Citation:
Envoyé par Pegasus32
Tout d'abord bonjour :)
Luss à toi !!
Citation:
Envoyé par Pegasus32
J'avais commencé à le programmer à la bourrin histoire d'avoir un squelette qui tourne sans me preocupper des classes.
Alors soit tu "fais une connerie" soit tu t'exprime mal.
Programmer à la bourrin "pour voir comment ça marche", afin de pouvoir "definir des classes", de "cerner leurs rôles", etc... Mais tel que tu l'as dis ça me dérange un peu. Passons.
Citation:
Envoyé par Pegasus32
( 1 seule instance)
Juste une note, ça s'appelle un "singleton" (prononciation franco-française, en tout cas moi j'avais fait l'erreur !)
Citation:
Envoyé par Pegasus32
( en gros hein, c'est pour simplifier :) )
les classes physicEngine et graphicEngine decrivent bien ce qu'elles font je pense ;)
Ben OK, c'est gentil de simplifier, mais précise, je te jure, j'ai pas de boule de crystal :wink: (Dystortion? ceux qui connaissent les Spi auront compris) Bref...
Citation:
Envoyé par Pegasus32
La classe hero contient la position, l'angle, la vie etc...
Mon probleme est le suivant : j'ai besoin d'utiliser la classe hero ( entre autre ) dans le moteur physique ( pour les collisions ) et pour le moteur graphique ( pour l'afficher forcement ^^ )
Ca précise un peut... Mais...
Ta classe Hero contient les Vertex et les faces du perso, ou non ? ne serais-ce que ça, il faut le savoir...
En plus tu te situe à une frange où l'objet pur est bienvenu pour un architecture modulaire et extensible, mais la technologie (les choix d'implémentation lié au language) sont déterminants pour les performances...
Il faut pus de précisions.
Citation:
Est-ce que ca veut dire que j'ai mal organisé mes classes? En principe une classe devrait etre fonctionnelle seule, enfin c'est du moins ce que j'ai appris :)
Une classe fonctionnelle seule ? Ca dépend... Un classe métier, oui, SOUVENT. Mais tout modèle possède un "graphe de dépendance", ce qui indique dans son nom que certaines classes ne peuvent être "isolées" au sens strict du terme.
Citation:
J'ai pensé rajouter une classe ObjetsCommuns dans le GameEngine, et passer un pointeur vers l'instance à mes 2 classes Graphic et physique, est-ce la meilleure chose à faire? je ne vois que ca pour l'instant :/
J'immagine que tu parle de polymorphisme. Passage par pointeur, pkoi pas. Par référence, en C++, c'est plus propre, mais soit EXPLICITE, s'il te plait (je me répète un peu trop, je pense que tu as compris, :wink:)
Voilà, j'attend tes précisions et je (nous) pourrons t'en dire plus !
Re: [c++]Architecture des classes pour un jeu
Citation:
Envoyé par Pegasus32
Pour l'instant en gros j'ai ca :
classe GameEngine ( 1 seule instance)
| classe Hero
| classe PhysicEngine
| classe GraphicEngine
| ...
On peut aussi imaginer que l'implémentation d'un moteur, soit composée de nombreuses classes regroupée au sein d'un namespace mais pas une classe en particulier.
Par exemple, l'implémentation du moteur graphique pourrait comprendre les classes : caméra, scene, source lumineuse, mesh ... regroupée au sein du namespace GraphicEngine.
L'implémentation du moteur physique pourrait comprendre différent types d'objets suivant les lois physique à modéliser : ressort, systèmes particules ... au sein du namespace PhysicEngine
La classe Héro serait dans un namespace spécifique au jeu, et par héritage elle récupérait les comportements de "mesh" (pour la partie visuelle) et "objet" pour la partie physique.
Citation:
Mon probleme est le suivant : j'ai besoin d'utiliser la classe hero ( entre autre ) dans le moteur physique ( pour les collisions ) et pour le moteur graphique ( pour l'afficher forcement ^^ )
Si tu dois partager une instance entre plusieurs objets qui l'agrégent, (ce qui t'arrivera forcément à un moment ou à un autre de ton projet), il te faut utiliser un mécanisme de smart pointeur avec comptage de référence.
Il y a beaucoup de librairies de smart ptr disponibles sur le net, mais les plus connues sont boost::shared_ptr<T> (la plus mature) et Loki (plus ambiteuse mais nécessite un compilateur très récent).