Державні машини, схоже, викликають шкідливі залежності в компонентних архітектурах.
Як, зокрема, обробляється комунікація між державною машиною та компонентами, що здійснюють поведінку, пов'язану з державою?
Де я:
- Я новачок в компонентних архітектурах.
- Я роблю бойову гру, хоча не думаю, що це має мати значення. Я припускаю, що моя державна машина використовується для перемикання станів, таких як "скручування", "дрімота", "блокування" тощо.
- Я знайшов цю техніку управління державою найбільш природною системою для архітектури, що базується на компонентах, але вона конфліктує з прийомами, про які я читав: Динамічна компонентна система об'єктів ігор для персонажів, що змінюються. самі, постійно перевіряючи умову активації.
- Я думаю, що такі дії, як "біг" або "ходьба", мають сенс як держави, що суперечить прийнятій тут відповіді: /gamedev//a/7934
Я вважав це корисним, але неоднозначним: як реалізувати поведінку в архітектурі ігор на основі компонентів? Він пропонує мати окремий компонент, який не містить нічого, крім станкової машини. Але це потребує певного зв'язку між складовою машини машини та майже всіма іншими компонентами. Я не розумію, як слід поводитися з цим зчепленням. Ось деякі здогадки:
A. Компоненти залежать від стану машини:
Компоненти отримують посилання на компонент стану машиниgetState()
, який повертає константу перерахування. Компоненти регулярно оновлюються і перевіряють це за потребою.B. Державна машина залежить від компонентів:
Компонент стан машини отримує посилання на всі компоненти, які він контролює. Він запитує їхgetState()
методи, щоб побачити, де вони.C. Деяка абстракція між ними
Використовуйте центр подій? Шаблон команди?D. Використовуються окремі об'єкти стану, які використовують еталонний
зразок State Pattern. Створюються окремі об'єкти стану, які активують / деактивують набір компонентів. Державна машина перемикається між об'єктами стану.Я розглядаю компоненти як реалізацію аспектів . Вони роблять все, що потрібно всередині, щоб цей аспект відбувся. Схоже, компоненти повинні функціонувати самостійно, не покладаючись на інші компоненти. Я знаю, що деякі залежності необхідні, але державні машини, схоже, хочуть контролювати всі мої компоненти.