Я разрабатываю игровой движок. Предполагается, что он основан на сущности / компонентах. Для разработки самой игры я подумал о том, чтобы использовать некоторый язык сценариев для создания сущностей.
Например, если я хочу добавить агрессивного монстра к игроку, это будет сущность с несколькими компонентами; эти компоненты будут меняться в зависимости от типа монстров, поэтому, если у меня в игре будет сто различных типов монстров, мне не придется создавать новый метод для каждого из них прямо в моем игровом коде.
Должен ли я использовать язык сценариев для описания этой сущности с точки зрения компонентов или есть что-то еще, что будет работать лучше? В целом, как мне использовать скрипты в моей игре?
Ответы:
Моя игра использует каркас компонентов сущностей и использует скрипты для определения сущностей (это напрямую не определяет поведение, я расскажу об этом подробнее в конце). Сценарии определяют фактические компоненты, которые будут использоваться для создания каждого объекта. Он использует простой язык сценариев, который я создал. Вот упрощенная версия одного из моих скриптов:
Многое из этого самоописывается, но вот некоторые основные моменты:
baseAttributes
ссылках тегов другой файл сценарий , который определяет общие компоненты , которые я не хочу , чтобы переопределить несколько раз. Он содержит такие компоненты , какposition
,liferequirements
и так далее. Если какой-либо компонент определен здесь снова, этот компонент перезапишет общий.[NAME] { }
набор определяет новый компонент, который будет добавлен к этим объектам.0.01:0.015
), когда создается новый гоблин, он создается с компонентом, который имеет случайное значение в этом диапазоне. Таким образом, у каждого гоблина будут немного разные навыки и немного разные скорости. Эта установка определяет, что все гоблины начнут с действительно хороших навыков размещения кубов и майнинга, что на самом деле только для моих собственных целей тестирования. Но, как я уверен, вы можете догадаться, очень легко изменить значения на то, что я хочу.Все это включает в себя создание собственного синтаксического анализатора, какую-то структуру для хранения определений сущностей (я называю мой Лексикон!) И фабрику для получения этих определений сущностей и генерации новых сущностей. Для меня эта система все еще находится на ранних стадиях, но получается очень, очень хорошо. Это довольно мощная система для быстрого определения сущностей и позволяет создавать любые сущности, которые вы хотите, используя созданные вами компоненты. Если вам неудобно создавать свой собственный парсер, я думаю, XML будет работать нормально. Я конвертировал свой из рекурсивного синтаксического анализатора с возвратом назад, который я написал для немного выдуманного языка программирования.
Как видите, это определяет сущность. Я упомянул, что это не определяет поведение напрямую. Однако он может легко определить такие вещи, как ненавистные враги и то, как агрессивно реагировать на этих врагов. Это было бы так же просто, как определить любой компонент, который вы используете для управления таким поведением. Мои сущности также имеют компонент интеллекта (не показан), который определяет такие вещи, как:
Как бы ни была определена ваша, именно ваша система будет управлять данными в этом компоненте, что, в свою очередь, влияет на поведение ваших сотрудников.
источник
if player.hasPoints(10) then i++ end skillTree[i]
будет псевдокодом. Однако я понятия не имею, насколько этот вопрос относится к этой должности.Если все, что вам действительно нужно, это способ определения компонентов Monster, тогда XML будет работать хорошо, и C #, и Java имеют молниеносную реализацию этого.
Ваш XML может быть
Тогда ваш класс мобов может выглядеть так. (Джава)
Где IPersonality - это интерфейс.
Затем вы можете загрузить свой XML и проанализировать каждое значение через фабрику.
например, проанализировать значение личности в PersonalityFactory, который просто:
Тогда вы можете настроить моб, как так
Ключ в том, что ваш движок знает формат xml и имеет фабрику для всего, что ему нужно.
Одним из преимуществ xml является то, что вы можете определить свою собственную схему, чтобы убедиться, что формат всегда правильный, см. Здесь .
Надеюсь это поможет
источник
Питон в порядке, я думаю. Часто LUA также является хорошей альтернативой, если вы хотите добавить возможности сценариев в свои программы.
Вы можете использовать XML для описания поведения ваших монстров, это может включать некоторое кодирование в реальном игровом коде, потому что вы сохраните только «имя» или некоторые атрибуты в соответствии с поведением (скорость, тип оружия, которое использует монстр, и т.д.) поведения, используемого в вашем игровом коде.
Если вы используете Scriptengine (например, LUA), вы можете перенести этот код из предварительно скомпилированной программы в файлы сценариев, которые загружаются во время выполнения. Чтобы сделать это, вы должны выставить API ваших "монстров" на скрипт. Это позволяет вам вызывать методы кода игры-монстра извне.
источник