¿Juego o motores basados ​​en componentes de código abierto?

15

He leído algo sobre el diseño de juegos basado en componentes, pero todavía tengo algunos problemas para averiguar cómo exactamente harías para implementarlo. ¿Hay algún buen ejemplo de juegos basados ​​en componentes o motores de juegos que pueda leer para tener una mejor idea de esto?

oconnor0
fuente

Respuestas:

7

Personalmente, no creo que haya buenos ejemplos, en gran parte porque la definición de un "sistema basado en componentes" para juegos está tan poco definida que puede significar casi nada.

Puede encontrar útil parte de la discusión en esta respuesta: Cómo implementar un sistema basado en componentes para elementos en un juego web

Sin embargo, en general, el enfoque es simplemente cambiar cualquier tipo de GameObject o Actor de una clase grande que maneja todo el comportamiento a una clase más simple que contiene objetos que realizan el comportamiento. Creo que trabajar a través de esto usted mismo y hacer diferentes componentes que se adapten a su juego a menudo será la mejor manera de proceder.

Kylotan
fuente
Escuche eso. Al tratar de encontrar buenos recursos, descubrí que casi todas las personas usan una terminología diferente para describir las cosas. Dificil comparar diferentes implementaciones cuando pasas la mitad del tiempo traduciendo las estructuras básicas. Sistema entidad, Sistema de componentes, objetos del juego, plantilla, Asamblea, el Montaje de componentes, etc ...
Comunicación sobre la cooperación
2

Aquí hay algunos recursos que te pueden gustar:
hay este hilo increíble. No es un motor de juego en sí, pero el diseño y la discusión son geniales.
Una pregunta sobre StackOverflow sobre un tema muy similar.

Para responder a la pregunta original, el marco Elephant en C # es precisamente lo que desea: ha sido descontinuado, pero todavía existe aquí para referencia de implementación.

El pato comunista
fuente
1

Este sitio comienza en una implementación básica.

La mayor parte de lo anterior está inspirado en este artículo en T = Machine

Comencé con una implementación básica inspirada en los dos enlaces anteriores. Estoy bastante seguro de que me he desviado mucho de la teoría pura de los sistemas de componentes y, sin duda, hay errores, pero podría resultar útil si está buscando algunos ejemplos simples.

Brículo (C # / XNA)

En este momento solo está cargando algunas entidades básicas, maneja algunos eventos, etc. Las ubicaciones principales que está buscando son la carpeta Engine.EntitySystem y probablemente la PlayScreen donde se crean realmente las entidades.

Crear una tienda de componentes basada en tipo simple y ocultar eso detrás de un EntityManager común fue relativamente sencillo.

El primer desafío que encontré fue cuando los sistemas individuales pueden requerir múltiples tipos de componentes (es decir, componentes físicos y InputMoveable). Para usar el lenguaje de base de datos relacional, tuve que encontrar una manera de hacer una consulta JOIN. Para eso, hice otro tipo de colección para entidades creadas a partir de las consultas de tipos de componentes coincidentes: cada colección de entidades se conecta a un evento OnEntityCreate y comprueba si coincide. Todavía hay algunos errores allí.

El segundo desafío fue en realidad crear un 'objeto de juego': los llamé plantillas. Aquí probablemente no soy muy puro de acuerdo con las especificaciones de T = Machine, pero parece funcionar. Las plantillas agrupan las instancias de componentes y permiten una composición de entidad más fácil (es decir, la bola es dibujable y física).

Espero que sea útil: los sistemas de entidad / componente pueden ser un desafío para superar algunos de los obstáculos iniciales.

Lenidad
fuente
1

Otro, que no he usado, pero revisé un poco el código, es Artemis . Bien comentado y bastante activo. Originalmente un marco de Java, pero se ha portado a C # / XNA.

Darren Reid
fuente