Я читал об основах Entity System, в частности Artemis. Я пытаюсь решить, подходит ли это мне. Я строго работаю над 2-пиксельными играми, основанными на плитках, и не думаю, что они когда-нибудь будут такими ресурсоемкими. Я всегда использовал стандартный ООП с большим количеством наследства в прошлом.
Мое понимание Entity System Framework прямо сейчас (я не уверен, что понял его полностью):
- Сущности не что иное, как идентификаторы
- Компоненты - просто тупые данные, добавленные в пул компонентов сущностей.
- Системы - это функции обновления, которые привязаны к миру и обрабатывают каждый объект, соответствующий сигнатуре компонента Системы.
Если мое понимание правильное, то у меня возникло немало проблем с концептуализацией добавления плиточных карт и Поведенческих деревьев AI в эту структуру. Я буду спрашивать об ИИ в будущем.
Должна ли карта тайлов быть встроена в эту структуру? Или он должен храниться отдельно, чтобы его было проще генерировать с помощью редактора тайлкарт?
Если мозаичная карта должна быть встроена в эту структуру, является ли каждая плитка отдельной сущностью? А плитка - это система? Или сама карта тайлов - это единое целое с наследованием, построенным на нем?
Если карта тайлов работает, каков будет лучший способ обнаружения столкновений объектов по внешней карте тайлов?
Я понимаю, что перечисленные мною варианты могут быть правильными, но если бы кто-то делал это в прошлом, они могли бы пролить некоторый свет на мое замешательство. Может быть, есть другая альтернатива, о которой я не подумал?
Спасибо.
источник
Ответы:
Я реализовал структуру компонентов сущности (похожую на Artemis) после того, как я уже некоторое время находился в разработке, но я не думаю, что я бы поступил иначе, если бы начал с чистого листа.
Мой мир полностью отделен от структуры сущностей. Мне просто не имело смысла превращать мир в какую-то сущность или совокупность сущностей. Мой мир - это 3D с кубиками, но я верю, что то же самое относится и к плиткам. Сущности составляют все остальное в мире, но местность отдельна. Однако, когда кубы удалены, они порождают «материальные» сущности.
Обнаружение столкновений не так уж и сложно. В вашем мире, вероятно, будут
isSolidAt(x,y)
методы типа, которые будет использовать ваша система столкновений. Честность, я сказал это однажды уже сегодня в другом ответе , делай то, что имеет для тебя наибольшее значение. Вы не нарушаете никаких правил, делая карту тайлов отдельно или делая ее сущностью. Все, что вы можете обернуть голову, это то, что лучше. Для меня это делало мир отдельным и делало все остальное сущностями.источник
isSolidAt
методу карты ?Я добавил плитку как отдельный компонент к объекту (со всеми плитками внутри), а также есть отдельное средство рендеринга для карты плиток, так что я могу визуализировать его в 3d или в 2d. Создать все плитки как объекты можно, но дорого.
что-то такое:
Преимущество отделения чертежа от логики - базовая идея шаблона MVC
источник