[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).