Как обрабатывать данные игровых объектов в игровой архитектуре на основе компонентов? - PullRequest
2 голосов
/ 05 декабря 2011

Я создаю архитектуру игровых объектов на основе компонентов.В моей ситуации у меня есть объекты визуализации и физики.Сцена рендеринга содержит визуализируемые объекты.Физическая сцена содержит физические объекты.У меня есть игровой объект, который имеет визуализируемый и физический объект.Каждый из них имеет абсолютно нулевую связь.Они даже находятся в отдельных библиотеках.

Одна из наиболее очевидных частей данных, в которых нуждается игровой объект, - это положение и вращение.И визуализируемый, и физический объект должны прочитать эту информацию, а в некоторых случаях записать в нее.Каковы некоторые эффективные подходы к обработке информации, специфичной для игры, а не для компонента, но необходимой для некоторых компонентов?

1 Ответ

2 голосов
/ 05 декабря 2011

Это кажется мне несколько странной архитектурой - вы будете вынуждены проделать большую работу, чтобы синхронизировать два отдельных графа сцены, и вы, вероятно, сочтете невозможным полностью отключить их (ситуация, которую вы описываете в вопрос пример, но будет намного больше .....)

Я бы посоветовал вам подумать об одном графе игровых объектов. У вас все еще могут быть физические стратегии и стратегии рендеринга для каждого объекта, но я бы посоветовал рассматривать их скорее как «плагины» для игрового объекта, а не как отдельные графы объектов. Таким образом, у игрового объекта могут быть векторы положения / вращения, к которым имеют доступ как физические компоненты, так и компоненты рендеринга.

Альтернативой, если вам не нравится ре-архитектура для одного графа игровых объектов, было бы выделение информации о положении / вращении в отдельную структуру, например, большой массив векторов. Объекты физики и рендеринга могут иметь общий доступ к этой структуре.

Это будет означать:

  • Как физическим объектам, так и объектам рендеринга необходимо знать индекс их собственной позиции в массиве (либо путем непосредственного хранения индекса, либо с помощью некоторой формы поиска в хэше)
  • Объекты физики и рендеринга должны быть довольны одинаковыми форматами положения / вращения
  • При создании / уничтожении объектов вам понадобится дополнительная бухгалтерия.
  • Вы должны быть немного осторожны с параллелизмом, например. что произойдет, если новые объекты физики будут добавлены во время рендеринга?

В целом, я не уверен, что это принесет вам большую пользу ...... но это может иметь смысл, если у вас есть какие-то другие ограничения, такие как дизайн сторонней библиотеки физики.

...