2017-01-23 6 views
0

В настоящее время я реструктурирую свой LibGDX-Projekt, чтобы он соответствовал ECS-структуре с использованием Ashley. На данный момент у меня следующая система-структура:Поделиться данными между системами в ECS (Ashley)

  • InputSystem (ручки игрока-Input)
  • PhysicSystem (относится скорость к объектам, делает обнаружение столкновений и перемещает их)
  • CameraSystem (регулирует камеру в камера-фокус)
  • RenderingSystem (трансформирует SpriteBatch с камерой-информацией и привлекает все юридическое лицо)

Теперь я знаю, что каждая система является су который содержит всю необходимую ему логику и исключает возможность усложнения. Но мне нужна камера в CameraSystem для ее настройки, мне нужно в RenderSystem применить преобразование камеры, и мне нужно это в InputSystem, чтобы увидеть, на что указывает мышь. Как вы решаете это с помощью ECS-подхода? Могут ли системы взаимодействовать друг с другом? Должен ли я использовать Singleton под названием «SharedData», где я отказываюсь от всего, что нужно для нескольких систем? Кажется мне немного уродливым.

Заранее спасибо :)

+0

Обычно я использую vis-runtime для ECS в своей игре. В режиме ожидания одна система вводится в другую систему, чтобы можно было легко получить доступ к другой системе. По словам меня, вы можете поделиться CameraSystem с другой системой. – Aryan

ответ

1

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

Доступ к ним можно получить непосредственно из Engine, когда к нему добавляется EntiySystem. Альтернативный подход может состоять в том, чтобы передавать общедоступные объекты в конструктор систем, если к нему часто обращаются, в прошлом я использовал это для передачи объекта Box2D World.

Я считаю, что мой код лучше объясняет мои рассуждения, поэтому вы можете взглянуть на одну из моих предыдущих игр, используя Эшли. https://github.com/basimkhajwal/LSD

P.S - Мой проект также включает в очередь событий для передачи сообщений между различными системами сущностей (без передачи данных, все данные по-прежнему инкапсулированной в Entity классах), которые я нашел, чтобы быть чрезвычайно полезными.

+0

Удивительно, я погружусь в ваш код и посмотрю, как вы справились со всем этим. Звук звучит неплохо. –

Смежные вопросы