Я читал кое-что о компонентном игровом дизайне, но все еще не могу понять, как именно вы будете его реализовывать. Есть ли хорошие примеры игр на основе компонентов или игровых движков, которые я мог бы прочитать, чтобы лучше понять это?
источник
Я читал кое-что о компонентном игровом дизайне, но все еще не могу понять, как именно вы будете его реализовывать. Есть ли хорошие примеры игр на основе компонентов или игровых движков, которые я мог бы прочитать, чтобы лучше понять это?
Лично я не думаю, что есть какие-либо хорошие примеры, в основном потому, что определение «компонентной системы» для игр так свободно определено, что оно может означать почти ничего.
Вам может пригодиться обсуждение в этом ответе: Как реализовать систему компонентов для элементов в веб-игре
В целом, однако, подход состоит в том, чтобы просто изменить любой вид GameObject или Actor из большого класса, который обрабатывает все поведение, в более простой класс, который содержит объекты, которые выполняют поведение. Я думаю, что работа над этим самостоятельно и создание различных компонентов, подходящих для вашей игры, часто являются лучшим способом для продолжения.
Вот некоторые ресурсы , которые вы можете , как:
Там в этот удивительный поток. Это не игровой движок, но дизайн и обсуждение великолепны.
Вопрос по StackOverflow на очень похожую тему.
Чтобы ответить на исходный вопрос, фреймворк Elephant в C # - это именно то, что вам нужно: он был снят с производства, но все еще существует здесь для справки о реализации.
источник
Этот сайт начинается с базовой реализации.
Большая часть вышеупомянутого вдохновлена этой статьей в T = Machine
Я начал с базовой реализации, вдохновленной двумя вышеупомянутыми ссылками. Я почти уверен, что сильно отклонился от чистой теории компонентных систем, и, несомненно, есть ошибки, но это может оказаться полезным, если вы ищете несколько простых примеров.
Bricle (C # / XNA)
Сейчас он просто загружает некоторые базовые объекты, обрабатывает некоторые события и т. Д. Основные места, которые вы ищете, - это папка Engine.EntitySystem и, возможно, PlayScreen, где сущности создаются.
Создание простого хранилища компонентов на основе типов и скрытие его за обычным EntityManager было относительно простым.
Первая проблема, с которой я столкнулся, заключалась в том, что отдельным системам может потребоваться несколько типов компонентов (т. Е. Физические компоненты и InputMoveable). Чтобы использовать язык реляционной базы данных, мне нужно было найти способ выполнить запрос JOIN. Для этого я создал другой тип коллекции для сущностей, созданных из соответствующих запросов типов компонентов - каждая коллекция сущностей подключается к событию OnEntityCreate и проверяет, соответствует ли оно. Все еще есть некоторые ошибки.
Второй проблемой было создание «игрового объекта» - я назвал их шаблонами. Здесь я, вероятно, не очень чист в соответствии со спецификациями T = Machine, но, похоже, работает. Шаблоны группируют экземпляры компонентов и позволяют упростить состав сущности (т. Е. Шарик может быть нарисован и физичен).
Надеюсь, что это полезно - системы сущностей / компонентов могут быть проблемой, чтобы преодолеть некоторые из начальных препятствий.
источник
Другой, который я не использовал, но немного просмотрел код, это Артемида . Хорошо прокомментировано и довольно активно. Первоначально среда Java, но была портирована на C # / XNA.
источник