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