Jeux ou moteurs basés sur des composants open source?

15

J'ai lu des informations sur la conception de jeux basés sur des composants, mais j'ai encore du mal à comprendre comment vous vous y prendriez pour l'implémenter. Existe-t-il de bons exemples de jeux basés sur des composants ou de moteurs de jeu que je pourrais lire pour mieux comprendre cela?

oconnor0
la source

Réponses:

7

Personnellement, je ne pense pas qu'il existe de bons exemples, en grande partie parce que la définition d'un "système basé sur les composants" pour les jeux est définie de manière si vague qu'elle peut ne signifier presque rien.

Vous pouvez trouver une partie de la discussion dans cette réponse utile: Comment implémenter un système basé sur des composants pour des éléments dans un jeu Web

Dans l'ensemble cependant, l'approche consiste simplement à changer n'importe quel type de GameObject ou Actor d'une grande classe qui gère tous les comportements en une classe plus simple qui contient des objets qui effectuent des comportements. Je pense que travailler par vous-même et créer différents composants qui conviennent à votre jeu sera souvent la meilleure façon de procéder.

Kylotan
la source
J'entends ça. En essayant de trouver de bonnes ressources dessus, j'ai constaté que presque chaque personne utilise une terminologie différente pour décrire les choses. Il a été difficile de comparer différentes implémentations lorsque vous passez la moitié du temps à traduire les structures de base. Système d'entité, système de composants, objet de jeu, modèle, assemblage, assemblage de composants, etc ...
Clémence
2

Voici quelques ressources qui pourraient vous plaire: il
y a ce fil étonnant. Ce n'est pas un moteur de jeu en soi, mais la conception et la discussion sont géniales.
Une question sur StackOverflow sur un sujet très similaire.

Pour répondre à la question d'origine, le framework Elephant en C # est exactement ce que vous cherchez: il a été abandonné, mais existe toujours ici pour référence d'implémentation.

Le canard communiste
la source
1

Ce site démarre dans une implémentation de base.

La plupart des éléments ci-dessus sont inspirés de cet article sur T = Machine

J'ai commencé dans une implémentation de base inspirée des deux liens ci-dessus. Je suis sûr que j'ai beaucoup dévié de la pure théorie des systèmes de composants, et il y a sans aucun doute des bugs, mais cela pourrait s'avérer utile si vous cherchez des exemples simples.

Bricle (C # / XNA)

Pour l'instant, il s'agit simplement de charger des entités de base, de gérer certains événements, etc. Les principaux emplacements que vous recherchez sont le dossier Engine.EntitySystem et probablement le PlayScreen où les entités sont réellement créées.

La création d'un magasin de composants basé sur un type simple et le masquage derrière un EntityManager commun était relativement simple.

Le premier défi que j'ai rencontré était lorsque des systèmes individuels pouvaient nécessiter plusieurs types de composants (c'est-à-dire des composants physiques et InputMoveable). Pour utiliser le langage de base de données relationnelle, j'ai dû trouver un moyen de faire une requête JOIN. Pour cela, j'ai créé un autre type de collection pour les entités construites à partir des requêtes de type de composant correspondant - chaque collection d'entités se connecte à un événement OnEntityCreate et vérifie si elle correspond. Encore quelques bugs là-bas.

Le deuxième défi consistait en fait à créer un «objet de jeu» - je les ai appelés modèles. Ici, je ne suis probablement pas très pur selon les spécifications de T = Machine, mais cela semble fonctionner. Les modèles regroupent les instanciations des composants et permettent une composition plus facile des entités (c.-à-d. Que la balle est dessinée et physique).

J'espère que c'est utile - les systèmes d'entités / composants peuvent être un défi pour surmonter certains des obstacles initiaux.

Clémence
la source
1

Un autre, que je n'ai pas utilisé, mais qui a parcouru un peu le code, est Artemis . Bien commenté et assez actif. Initialement un framework Java mais a été porté sur C # / XNA.

Darren Reid
la source