Máquinas de estado parecem causar dependências prejudiciais em arquiteturas baseadas em componentes.
Como, especificamente, é tratada a comunicação entre uma máquina de estado e os componentes que executam o comportamento relacionado ao estado?
Onde estou:
- Eu sou novo em arquiteturas baseadas em componentes.
- Estou fazendo um jogo de luta, embora não ache que isso importe. Eu imagino que minha máquina de estado seja usada para alternar estados como "agachado", "arrojado", "bloqueado" etc.
- Eu descobri que essa técnica de gerenciamento de estado é o sistema mais natural para uma arquitetura baseada em componentes, mas está em conflito com as técnicas que eu li sobre: Sistema de componentes de objetos de jogos dinâmicos para caracteres de comportamento mutável Sugere que todos os componentes sejam ativados / desativados verificando continuamente uma condição para ativação.
- Penso que ações como "correr" ou "caminhar" fazem sentido como estados, o que está em desacordo com a resposta aceita aqui: /gamedev//a/7934
Achei isso útil, mas ambíguo: como implementar o comportamento em uma arquitetura de jogos baseada em componentes? Sugere ter um componente separado que não contenha nada além de uma máquina de estado. Porém, isso requer algum tipo de acoplamento entre o componente da máquina de estado e quase todos os outros componentes. Não entendo como esse acoplamento deve ser tratado. Estas são algumas suposições:
A. Os componentes dependem da máquina de estado: Os
componentes recebem referência aos componentes da máquina de estadogetState()
, que retornam uma constante de enumeração. Os componentes se atualizam regularmente e verifique isso conforme necessário.B. A máquina de estado depende dos componentes:
O componente da máquina de estado recebe referências a todos os componentes que está monitorando. Ele consulta seusgetState()
métodos para ver onde eles estão.C. Alguma abstração entre eles
Use um hub de eventos? Padrão de comando?D. Objetos de estado separados que fazem referência aos componentes
State Pattern são usados. Objetos de estado separados são criados, que ativam / desativam um conjunto de componentes. Máquina de estado alterna entre objetos de estado.Estou vendo os componentes como implementações de aspectos . Eles fazem tudo o que é necessário internamente para que esse aspecto aconteça. Parece que os componentes devem funcionar por conta própria, sem depender de outros componentes. Eu sei que algumas dependências são necessárias, mas as máquinas de estado parecem querer controlar todos os meus componentes.