¿Existen marcos basados ​​en componentes FOSS existentes? [cerrado]

25

El paradigma de programación de juegos basado en componentes se está volviendo mucho más popular. Me preguntaba, ¿hay algún proyecto que ofrezca un marco de componentes reutilizables? En cualquier idioma, supongo que no me importa eso. No es para mi propio proyecto, solo tengo curiosidad.

Específicamente, quiero decir, ¿hay proyectos que incluyen una Entityclase base , una Componentclase base y quizás algunos componentes estándar? Entonces sería mucho más fácil comenzar un juego si no quisieras reinventar la rueda, o tal vez quieras un GraphicsComponentsprites con Direct3D, pero crees que ya se ha hecho una docena de veces.

Un rápido Google busca a Rusher . ¿Alguien ha oído hablar de esto / alguien lo usa? Si no hay populares, ¿por qué no? ¿Es demasiado difícil hacer que algo como esto sea reutilizable y necesitan una gran personalización? En mi propia implementación, encontré una gran cantidad de repeticiones que se podrían insertar en un marco.

Tesserex
fuente
44
¡Deberías ser el primero en escribir uno! :)
Ricket
1
Bueno, escribí uno en C # para mi propio proyecto. ¿Quizás todos podamos contribuir?
Tesserex
Estaría totalmente dispuesto a trabajar en ese proyecto C #. Sí, no hay un gran consenso sobre cómo debería funcionar un estándar, pero tal vez podríamos centrarnos en XNA (lo que sea que haga flotar su barco). El hecho de que un grupo de gigantes no haya declarado la mejor manera de hacerlo no significa que no podamos intentar / experimentar.
Michael Coleman
Quizás porque el diseño basado en componentes atrae a los gerentes de proyecto más que a los programadores
M. Utku ALTINKAYA

Respuestas:

45

Si no hay populares, ¿por qué no?

Porque no hay nada parecido a un consenso sobre cómo funcionaría dicho marco.

En un hilo en Gamedev.net, determiné que cuando las personas hablan sobre sistemas de juegos basados ​​en componentes, en realidad hay al menos 8 posibles permutaciones de cómo esperan que funcionen, en función de 3 factores diferentes:

Inboard vs. outboard : ¿deberían los componentes agregarse en una entidad, o deberían ser parte de un subsistema y solo estar asociados por una ID de entidad?

Composición estática frente a dinámica : si las entidades consisten en un conjunto conocido de componentes (por ejemplo, 1 física, 1 animación, 1 IA, etc.) que pueden comunicarse en código a través de interfaces bien conocidas, o pueden las entidades tener cantidades arbitrarias de componentes agregados a ellos (con estrategias asociadas para localizar otros componentes de interés)

Datos sobre el componente versus datos sobre la entidad : ¿el componente que opera principalmente sobre el mismo debe conservar los datos? ¿O deben almacenarse los datos en la entidad en un espacio compartido, accesible para todos los componentes?

Más allá de eso, hay más preguntas sobre cómo deben comunicarse los componentes (¿a través de los datos compartidos? ¿A través de punteros de función? ¿A través de señales / ranuras? ¿O no hay nada?), Cómo deben actualizarse (en un orden fijo basado en el tipo de componente? A por -orden de entidad definido en el momento de la creación? basado en un tipo topológico de interdependencias de componentes?), etc.

Cada una de estas opciones es completamente arbitraria, y cualquier cosa que pueda hacer con un sistema puede hacerse con el otro. Pero la forma en que debe codificarlo es bastante diferente en cada caso. Y las personas parecen tener opiniones firmes sobre la forma en que les funciona mejor.

En este momento, la gente todavía está demasiado atrapada en la idea de que los componentes son de alguna manera un reemplazo para la orientación de los objetos (que no lo son) y también imaginando que son un cambio masivo de la forma en que los juegos se hicieron tradicionalmente (lo que, de nuevo, no eran - las personas han factorizado los diversos subsistemas en sus entidades durante años), por lo que hay mucha hipérbole y poco acuerdo. Quizás en unos años las cosas se habrán calmado y la gente se conformará con uno o dos enfoques bastante estándar.

Kylotan
fuente
1
Aprecio que esta respuesta sea antigua, pero ahora está mal: hay marcos populares, y queda muy poco debate sobre el tema. Al escribir juegos, la mayoría de las preguntas anteriores no importan: o no tienen efecto en el diseño del código, o un enfoque es rápido y reutilizable donde los otros no lo son. En la práctica, hay un montón de Frameworks populares: la wiki vinculada a una de las otras respuestas es un buen punto de partida (muchos de nosotros la mantenemos para que sea más fácil encontrar juegos y marcos reales enviados)
Adam
1
@ Adam: me gustaría un enlace sobre los detalles sobre el enfoque que ganó la partida de evolución de Darwin en ese momento. cuando digo detalles, no quiero escuchar acerca de dentro y fuera de borda, quiero saber acerca de mapas hash, vectores, asignadores, privados, públicos, bucles, constantes ... Detalles de nivel BAJO.
v.oddou
@ v.oddou alguien ya publicó un enlace a la wiki como respuesta (ver más abajo). ¿Quieres detalles? Está lleno de código fuente .
Adam
10

Hay una wiki que reúne ejemplos de todo esto:

http://entity-systems.wikidot.com/

... junto con explicaciones de las diferencias entre los diferentes enfoques.


fuente
Ash y Artemis (ambos en la wiki) han demostrado ser populares, ambos en uso para el desarrollo de juegos comerciales, junto con el desarrollador de juegos de hobby.
Adam
4

Compruebe estos marcos que descubrí relacionados con esta arquitectura ...

www.burgerengine.com

PushButtonEngine

Marco Arthemis - https://github.com/artemis-esf/artemis-framework/tree/master/src/com/artemis

Echando un vistazo a Unity Api. Puede encontrar muchas cosas relacionadas con la arquitectura basada en componentes. (Actualizaré la lista tan pronto como encuentre algo más ...)

Actualizar:

      https://code.google.com/p/spartanframework/

Esto explica sobre los sistemas de entidad de una buena manera ... http://piemaster.net/2011/07/entity-component-primer/

Ayyappa
fuente
2

Hay un motor de botón para Flash: http://pushbuttonengine.com/

Y hay Panda3D para c ++ / python: panda3d dot com (lo siento, solo se me permite 1 url por publicación como n00b)

Estoy seguro de que hay toneladas más por ahí :)

CJ Hanson
fuente