Класс Java Entity с использованием шаблона проектирования компонентов и состояний

Я пытаюсь создать Entity для игры, в которой используются шаблоны проектирования компонентов и состояний. Позволь мне объяснить.

Компоненты, составляющие Entity, будут состоять из InputComponent, PhysicsComponent и GraphicsComponent (на данный момент). Каждый компонент будет иметь свой собственный класс, чтобы поддерживать чистоту и развязку. Таким образом, вы можете реализовать свои собственные компоненты, такие как, например, PlayerInputComponent для представления ввода игрока, а затем создать Entity, как это -> Entity player = new Entity(input, physics, graphics).

Эта система сама по себе очень хорошо работает для разделения кода, составляющего Entity. Это делает класс Entity достаточно гибким, чтобы принимать все различные типы компонентов, допуская множество вариаций. Однако, как указано в вопросе, я также хочу использовать шаблон проектирования State, и я не могу придумать, как заставить их хорошо сосуществовать.

Шаблон проектирования State будет использоваться для представления конечного набора состояний, в которых может находиться Entity. Например, будут RunningState, IdleState, JumpingState и т. д. Эти состояния смогут обрабатывать ввод и обновлять , решая, когда менять состояния и на какое состояние переходить. Например, если клавиши движения нажаты в IdleState, IdleState обработает это и решит переключиться на RunningState. Это упрощает отслеживание анимации и выделяет логику изменения состояний в отдельный класс, избегая сложных логических операторов.

Мой вопрос: как я могу смешать оба этих шаблона, чтобы они хорошо работали вместе? Мне нужно, чтобы все компоненты имели доступ к этим состояниям, потому что переходы состояний могут происходить в InputComponent или PhysicsComponent (на данный момент), и состояния также должны быть доступны в GraphicsComponent, чтобы я мог нарисовать правильный кадр для текущей анимации. .

Как лучше всего настроить мой класс Entity, чтобы он мог реализовать оба шаблона и заставить их взаимодействовать друг с другом, не создавая беспорядка в классе Entity. Спасибо!


person Scooter    schedule 16.08.2016    source источник
comment
Вас может заинтересовать этот вопрос об альтернативных проектах с шаблоном State.   -  person jaco0646    schedule 17.08.2016