Я пытаюсь спроектировать систему сущностей на основе компонентов для целей обучения (а позже и использовать в некоторых играх), и у меня возникают некоторые проблемы с обновлением состояний сущностей.
Я не хочу иметь метод update () внутри компонента, чтобы предотвратить зависимости между компонентами.
В настоящее время я имею в виду, что компоненты содержат данные и компоненты обновления системы.
Итак, если у меня есть простая 2D-игра с некоторыми объектами (например, игрок, враг1, враг2), которые имеют компоненты Transform, Movement, State, Animation и Rendering, я думаю, что я должен иметь:
- MovementSystem, которая перемещает все компоненты Movement и обновляет компоненты State.
- И RenderSystem, которая обновляет компоненты Animation (компонент анимации должен иметь одну анимацию (то есть набор кадров / текстур) для каждого состояния и обновлять ее, означает выбор анимации, соответствующей текущему состоянию (например, jump, moving_left и т. Д.), И обновление индекса кадра). Затем RenderSystem обновляет компоненты Render с помощью текстуры, соответствующей текущему кадру анимации каждого объекта, и отображает все на экране.
Я видел несколько реализаций, таких как Artemis Framework, но я не знаю, как решить эту ситуацию:
Допустим, в моей игре есть следующие сущности. Каждый объект имеет набор состояний и одну анимацию для каждого состояния:
- игрок: «холостой», «moving_right», «прыжки»
- враг1: "перемещение_вверх", "перемещение_для"
- враг 2: "движущийся влево", "движущийся вправо"
Каковы наиболее приемлемые подходы для обновления текущего состояния каждого объекта? Единственное, о чем я могу думать, - это иметь отдельные системы для каждой группы объектов и отдельные компоненты State и Animation, поэтому у меня будут PlayerState, PlayerAnimation, Enemy1State, Enemy1Animation ... PlayerMovementSystem, PlayerRenderingSystem ... но я думаю, что это плохо решение и ломает цель иметь систему на основе компонентов.
Как вы можете видеть, я совершенно заблудился здесь, поэтому я очень признателен за любую помощь.
РЕДАКТИРОВАТЬ: Я думаю, что решение, чтобы сделать эту работу, как я намерен это следующее:
Вы делаете составные компоненты состояния и анимации достаточно общими, чтобы их можно было использовать для всех объектов. Содержащиеся в них данные будут модификатором изменений, например, какие анимации воспроизводятся или какие состояния доступны. - Byte56
Теперь я пытаюсь выяснить, как спроектировать эти два компонента достаточно универсально, чтобы я мог использовать их повторно. Хорошим решением может быть наличие UID для каждого состояния (например, ходьба, бег ...) и сохранение анимации на карте в AnimationComponent, заданном этим идентификатором?
statecomponent
и animationcomponent
достаточно универсальным, чтобы использоваться для всех сущностей. Содержащиеся в них данные будут модификатором изменений, например, какие анимации воспроизводятся или какие состояния доступны.