Игра с открытым исходным кодом на основе компонентов или движки?

15

Я читал кое-что о компонентном игровом дизайне, но все еще не могу понять, как именно вы будете его реализовывать. Есть ли хорошие примеры игр на основе компонентов или игровых движков, которые я мог бы прочитать, чтобы лучше понять это?

oconnor0
источник

Ответы:

7

Лично я не думаю, что есть какие-либо хорошие примеры, в основном потому, что определение «компонентной системы» для игр так свободно определено, что оно может означать почти ничего.

Вам может пригодиться обсуждение в этом ответе: Как реализовать систему компонентов для элементов в веб-игре

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

Kylotan
источник
Я слышу это. Пытаясь найти хорошие ресурсы, я обнаружил, что почти каждый человек использует различную терминологию для описания вещей. Сложно сравнивать разные реализации, когда вы тратите половину времени на перевод базовых структур. Система сущностей, Система компонентов, Игровой объект, Шаблон, Сборка, Сборка компонентов и т. Д.
Лентенс
2

Вот некоторые ресурсы , которые вы можете , как:
Там в этот удивительный поток. Это не игровой движок, но дизайн и обсуждение великолепны.
Вопрос по StackOverflow на очень похожую тему.

Чтобы ответить на исходный вопрос, фреймворк Elephant в C # - это именно то, что вам нужно: он был снят с производства, но все еще существует здесь для справки о реализации.

Коммунистическая утка
источник
1

Этот сайт начинается с базовой реализации.

Большая часть вышеупомянутого вдохновлена ​​этой статьей в T = Machine

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

Bricle (C # / XNA)

Сейчас он просто загружает некоторые базовые объекты, обрабатывает некоторые события и т. Д. Основные места, которые вы ищете, - это папка Engine.EntitySystem и, возможно, PlayScreen, где сущности создаются.

Создание простого хранилища компонентов на основе типов и скрытие его за обычным EntityManager было относительно простым.

Первая проблема, с которой я столкнулся, заключалась в том, что отдельным системам может потребоваться несколько типов компонентов (т. Е. Физические компоненты и InputMoveable). Чтобы использовать язык реляционной базы данных, мне нужно было найти способ выполнить запрос JOIN. Для этого я создал другой тип коллекции для сущностей, созданных из соответствующих запросов типов компонентов - каждая коллекция сущностей подключается к событию OnEntityCreate и проверяет, соответствует ли оно. Все еще есть некоторые ошибки.

Второй проблемой было создание «игрового объекта» - я назвал их шаблонами. Здесь я, вероятно, не очень чист в соответствии со спецификациями T = Machine, но, похоже, работает. Шаблоны группируют экземпляры компонентов и позволяют упростить состав сущности (т. Е. Шарик может быть нарисован и физичен).

Надеюсь, что это полезно - системы сущностей / компонентов могут быть проблемой, чтобы преодолеть некоторые из начальных препятствий.

снисходительность
источник
1

Другой, который я не использовал, но немного просмотрел код, это Артемида . Хорошо прокомментировано и довольно активно. Первоначально среда Java, но была портирована на C # / XNA.

Даррен Рейд
источник