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 Entity
clase base , una Component
clase 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 GraphicsComponent
sprites 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.
fuente
Respuestas:
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.
fuente
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
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:
Esto explica sobre los sistemas de entidad de una buena manera ... http://piemaster.net/2011/07/entity-component-primer/
fuente
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í :)
fuente