Когда использовать систему в Entity Component Systems в NEZ / Monogame - PullRequest
0 голосов
/ 01 марта 2020

Я только начинаю работать с Monogame, потратив немало времени на работу с LibGDX, и решил, что взгляну на NEZ, чтобы быстрее начать работу.

Играя с NEZ Я впервые познакомился с системами компонентов сущностей, и после большого количества чтения я чувствую, что у меня достаточно приличного гр asp того, как они должны работать, однако просмотр образцов, поставляемых с NEZ, дает мне немного запутан.

В примере приключения Ниндзя Ниндзя (доступно здесь: https://github.com/prime31/Nez-Samples/tree/master/Nez.Samples/Scenes/Ninja%20Adventure) есть довольно базовая c настройка:

  • ниндзя - Компонент (выглядит как архетип)
    • Mover - Компонент (обрабатывает движение и содержит компонент обнаружения столкновений)
    • SpriteAnimator - Компонент

Вся обработка ввода (т. Е. Клавиатура и c) обрабатывается в рамках метода обновления компонента Ninja.

Аналогично, снаряд, который ниндзя может выстрелить, имеет прикрепленный FireballProjectileController и в своем методе on update он вычисляет движение, выполняет обнаружение столкновений и уничтожает объект, если он что-то касается.

В приведенных выше двух примерах все, что происходит в методах обновления, похоже на то, что вы делаете. Я бы добавил в систему не обновление отдельного компонента. Например,

  • Создание системы ввода, которая проходит через все объекты с компонентом ввода и обновляет их положение на основе нажатых клавиш и значения в компоненте скорости
  • Создание обнаружения столкновения система, которая проходит через все сущности с физическим компонентом и выполняет обнаружение столкновений

Итак, мои вопросы:

  1. Это всего лишь личное предпочтение разработчика NEZ?
  2. Должны ли компоненты иметь какой-либо код, кроме некоторых базовых c сеттеров / геттеров / вспомогательных функций для расчета изменений их внутренних значений?
  3. Есть ли преимущество для выполнения всей этой логики c внутри компонентов, а не вытащить их в систему?

Спасибо

...