Кажется, что конечные автоматы вызывают вредные зависимости в компонентных архитектурах.
Как, в частности, осуществляется связь между конечным автоматом и компонентами, которые выполняют поведение, связанное с состоянием?
Где я нахожусь:
- Я новичок в компонентных архитектурах.
- Я делаю файтинг, хотя не думаю, что это должно иметь значение. Я предполагаю, что мой конечный автомат используется для переключения состояний, таких как «заискивание», «лишение», «блокирование» и т. Д.
- Я нашел эту технику управления состоянием самой естественной системой для архитектуры на основе компонентов, но она противоречит методам, о которых я читал: Система компонентов динамических игровых объектов для изменяемых символов поведения. Предполагается, что все компоненты активируют / деактивируют сами, постоянно проверяя условия для активации.
- Я думаю, что такие действия, как «бег» или «ходьба», имеют смысл как состояния, что противоречит принятому здесь ответу: /gamedev//a/7934.
Я нашел это полезным, но неоднозначным: как реализовать поведение в компонентной игровой архитектуре? Он предлагает иметь отдельный компонент, который не содержит ничего, кроме конечного автомата. Но это требует некоторой связи между компонентом конечного автомата и почти всеми другими компонентами. Я не понимаю, как эта связь должна быть обработана. Вот некоторые догадки:
О. Компоненты зависят от конечного автомата:
Компоненты получают ссылку на компонент конечного автоматаgetState()
, которая возвращает константу перечисления. Компоненты регулярно обновляются и проверяют это по мере необходимости.B. Конечный автомат зависит от компонентов.
Компонент конечного автомата получает ссылки на все компоненты, которые он отслеживает. Он запрашивает ихgetState()
методы, чтобы увидеть, где они находятся.C. Какая-то абстракция между ними.
Используйте концентратор событий? Шаблон команды?D. Отдельные объекты состояния, которые ссылаются на компоненты
State Pattern. Создаются отдельные объекты состояния, которые активируют / деактивируют набор компонентов. Конечный автомат переключается между объектами состояния.Я смотрю на компоненты как на реализацию аспектов . Они делают все, что нужно внутренне, чтобы это произошло. Кажется, что компоненты должны функционировать самостоятельно, не полагаясь на другие компоненты. Я знаю, что некоторые зависимости необходимы, но конечные автоматы, похоже, хотят контролировать все мои компоненты.