# Applications > Dveloppement 2D, 3D et Jeux > Moteurs de jeux vido >  [OO-Conception] Moteur de jeu:comment assembler ses pieces?

## bachir006

Bonjour,
A l'etape de pre-codage de mon moteur de jeu, je suis confronte a un probleme de conception: comment assembler les differentes pices de mon moteur?
Plus precisement, tout ce qui s'affiche a l'ecran est un SceneNode, tout ce qui peut entrer en collisions avec d'autres entites et subir les lois physiques est un "Body". 
Un Objet du jeu(par exemple un arbre ou encore le joueur lui meme)est donc a la fois un SceneNode et un Body.
Le moteur graphique s'occupe de creer le SceneNode, de meme pour le moteur physique avec les "Body"
Alors ma question: Ceci me semblait tres logique au debut, mais a la creation de ma classe "Objet" qui est(ou a comme attribut, c'est plus simple comme ca), je dois a chaque fois passer les deux moteurs(graphique et physique) au constructeur, ce qui n'est pas assez propre. 
J'espere avoir ete assez clair, sinon demandez-moi. et merci d'avance pour votre aide.

----------


## oxyde356

Utilise le pattern singleton sur tes moteurs et fais une fonction statique getInstance te permettant d'y accder facilement de partout et tu pourras enlever tes paramtres pour accder aux moteurs.

----------


## bachir006

Ce n'est pas les parametres qui posent probleme, mais le fait que la classe GameObject puisse acceder a l'interace des moteurs.

----------


## oxyde356

Je ne suis pas sr de comprendre ton problme.



> Alors ma question: Ceci me semblait tres logique au debut, mais a la creation de ma classe "Objet" qui est(ou a comme attribut, c'est plus simple comme ca), je dois a chaque fois passer les deux moteurs(graphique et physique) au constructeur, ce qui n'est pas assez propre.


Il me semblait que ma rponse rpondait  ce problme, peut tre ne l'ai-je pas assez expliqu et tu as compris autre chose. Enfaite en utilisant le pattern singleton sur tes moteurs. Tu n'a plus besoin d'avoir des attributs qui pointent dessus pour y accder. Donc pas besoin de les passer par le constructeur et de les stocker dans ton objet. Il te suffit donc d'inclure le .h de ta classe correspondant au moteur que tu veux utiliser et de faire un truc du genre CPhysicEngine::getInstance() pour obtenir un pointeur sur ton moteur et pour pouvoir l'utiliser. Si ce n'est pas du tout ce que tu veux il faudrait donner plus d'informations car sinon je ne comprend pas ce que tu souhaite obtenir.

----------


## bafman

un dcoupage classique consiste  avoir tes donnes (ton arbre, avec son scne node et autre), avoir les moteur de rendu  cot, et des "renderer" intermediaire, qui vont rcuprer les info dont ils ont besoin dans tes donnes (le moteur de rendu va cherche le scene node, le moteur physique va chercher les info physique etc...)

Ainsi, ce n'est plus  ton arbre de stocker des pointeur vers les moteurs de rendu, mais au "renderer" de stocker un pointeur vers le moteur de rendu, et un ensemble d'lment  traiter avec ce moteur.

----------

