Las máquinas de estado parecen causar dependencias dañinas en arquitecturas basadas en componentes.
¿Cómo, específicamente, se maneja la comunicación entre una máquina de estado y los componentes que llevan a cabo un comportamiento relacionado con el estado?
Donde estoy
- Soy nuevo en arquitecturas basadas en componentes.
- Estoy haciendo un juego de lucha, aunque no creo que eso deba importar. Imagino que mi máquina de estado se usa para alternar estados como "agacharse", "apresurarse", "bloquear", etc.
- He descubierto que esta técnica de administración de estado es el sistema más natural para una arquitectura basada en componentes, pero está en conflicto con las técnicas sobre las que he leído: Sistema dinámico de componentes de objetos de juego para caracteres de comportamiento mutable. Sugiere que todos los componentes se activen / desactiven ellos mismos al verificar continuamente una condición para la activación.
- Creo que acciones como "correr" o "caminar" tienen sentido como estados, lo que está en desacuerdo con la respuesta aceptada aquí: /gamedev//a/7934
He encontrado esto útil, pero ambiguo: ¿Cómo implementar el comportamiento en una arquitectura de juego basada en componentes? Sugiere tener un componente separado que no contenga más que una máquina de estado. Pero, esto requiere algún tipo de acoplamiento entre el componente de la máquina de estado y casi todos los demás componentes. No entiendo cómo se debe manejar este acoplamiento. Estas son algunas conjeturas:
A. Los componentes dependen de la máquina de estado: los
componentes reciben referencia a los componentes de la máquina de estadogetState()
, que devuelve una constante de enumeración. Los componentes se actualizan regularmente y verifican esto según sea necesario.B. La máquina de estados depende de los componentes: el componente de la
máquina de estados recibe referencias a todos los componentes que está monitoreando.getState()
Consulta sus métodos para ver dónde están.C. Alguna abstracción entre ellos ¿
Usa un centro de eventos? Patrón de comando?D. Se
utilizan objetos de estado separados que hacen referencia a los componentes . Se crean objetos de estado separados, que activan / desactivan un conjunto de componentes. La máquina de estado cambia entre objetos de estado.Estoy mirando los componentes como implementaciones de aspectos . Hacen todo lo que se necesita internamente para que ese aspecto suceda. Parece que los componentes deberían funcionar solos, sin depender de otros componentes. Sé que algunas dependencias son necesarias, pero las máquinas de estado parecen querer controlar todos mis componentes.