Maintenant que TGPA est terminé et que j’ai réalisé quelques autres prototypes de jeux, je consacre un peu de mon temps à la recherche d’une bonne architecture logicielle pour un jeu vidéo.
Pour cela, je me base sur les critères suivant :
- Compatibilité multi-plateforme : cela me paraît essentiel à l’heure des systèmes multiples (Android, iOS, Windows, etc) afin de viser le plus de marché possible. Par compatibilité j’entends le fait de pouvoir réutiliser le plus grand nombre d’éléments possibles dans plusieurs versions (une version = une plate-forme) de la même application.
- Scalabilité : il faut également pouvoir conserver cette architecture pour des projets de différentes tailles. Bien sûr je pense à des jeux allant du Tetris à un The Great Paper Adventure, je ne vise pas une production AAA comme Call of Duty.
- Intégration à un éditeur : point essentiel, pouvoir créer ou intégrer du contenu provenant d’un éditeur dans le jeu. Ne jamais faire ses niveaux à la main, dans un fichier texte, toujours se créer les outils dont on a besoin même si c’est laborieux.
Comme vous pouvez le constater, je ne vise pas la performance. Et clairement, si vous êtes allergiques aux appels de méthode en cascades, aux listes, bref à la programmation de haut niveau, passez votre chemin (hein mon lapin
).
Pour mes tests j’ai utilisé le scénario suivant :
- Création d’un jeu 2D
- Création de niveaux sur Ogmo Editor
- Données statiques du jeu (types d’ennemis, d’armes, etc) stockées dans un fichier XML
Je vais donc présenter le design par entités, utilisé dans TGPA, et sa transformation étape par étape en une architecture compatible avec tous les points cités précedemment.
Lire la suite :
- Partie 1 : présentation du pattern « Entités »
- Partie 2 : décomposition du pattern en composants
- Partie 3 : sérialisation des données statiques
Références :


Je balance du lien juste pour la lecture, et parce que c’est open source et impressionnant : http://www.quelsolaar.com/love/index.html
Le mec bosser sur OpenGL et nous a pondu des composants/moteur de jeu pour avoir des mondes partagé en réseau, avec des outils pour concevoir le tout.
Sinon, s’il est clair que XNA est le choix de base pour développer pour plateforme Microsoft, c’est difficilement le meilleur choix pour d’autres plateformes.
Même si Mono est prometteur et maintenant parti pour être développé pour la plateforme mobile, je vois plusieurs choix :
* Choisir un langage partagé et des outils partagés par toutes les plateformes (C++ / xxx par exemple)
* Abstraire le moteur et permettre de choisir parmi plusieurs build targets différents.
* Construire une sur-couche compatible au niveau API avec XNA, mais fonctionnant sur les plateformes manquantes. (comme Mono)
Merci pour le lien !
Pour les propositions pour les plate-formes mobiles, même si on y viendra sûrement, cela reste très théorique : je pense que que pour avoir des performances optimales (ce qui peut être crucial pour certains jeux) l’idéal reste de coder dans le langage du SDK officiel. Surtout sur des petits projets, où coder un système générique sera peut-être encore plus coûteux (mais rentable sur le long terme ?)
Concernant les outils je pense justement qu’avoir des outils dans d’autres langages que celui du moteur peut être intéressant. Certaines technos permettent plus rapidement de faire des choses que d’autres, et cela dépend aussi bien sûr des développeurs, donc il peut à mon avis être plus avantageux d’utiliser des technos différentes. Et c’est là qu’XML ou d’autres formats d’échanges sont pratiques, puisqu’ils sont universellement supportés.
Autre lien alors, http://polycode.org/ plateforme jeune pour développer du graphique/jeu en multiplateforme. C’est comme Cinder ou Openframeworks, mais un peu plus orienté jeux. Et dispo en C++/Lua.
Sinon Ogre, mais trop trop trop gros je trouve…