Какой язык сценариев вы бы порекомендовали для игрового проекта C ++? [закрыто]

14

Под сценариями здесь я подразумеваю не только помещение данных конфигурации в сценарий, но и части сценариев проекта, такие как некоторые методы классов, тестирование определенного игрового цикла и т. Д. Это будет не только ускорить разработку, но и позволит игрокам увидеть некоторые из этих скрипты для настройки некоторых аспектов игры.

В некоторых языках, таких как Lua, есть некоторые оболочки, такие как luabind, но когда я использовал его в прошлом, у него были проблемы, потому что он не поддерживал переопределение методов в контексте наследования.

Каковы ваши предложения языка / оболочки, чтобы использовать или не использовать?

Фредерик Имбо
источник

Ответы:

9

Lua-скриптовые видео игры
Lua-скриптовые игровые движки

Я думаю, что Луа - лучший выстрел.

Эта статья об интеграции Lua и C ++. Это говорит:

LuaBind - отличный продукт, но для меня это выглядело слишком сложно. Для одного кода не легко следовать, где классы и объекты. Также, видя, что я хотел интегрировать Lua в приложение wxWidgets, использование шаблонов было чем-то вроде нет (вы можете прочитать о кроссплатформенных проблемах на сайте wxWidgets).

Есть много других обязательных библиотек:

http://luabridge.sourceforge.net/
http://www.stackedboxes.org/~lmb/diluculum/
http://cpplua.sourceforge.net/
http://www.tecgraf.puc-rio.br/~ Целес / tolua /

Какова лучшая оболочка C ++ / Lua?

Просто выберите и наслаждайтесь.

lcpp
источник
Да, Lua довольно прост и очень легко интегрируется с C. На самом деле, это главная цель Lua - быть встроенным языком.
Марко Мустапик
Спасибо за ссылку на LuaBind, возможно, копание в других библиотеках связывания убедит меня в том, что я снова
взялся
Однако я рекомендую запускать ваши сценарии только в главном потоке и предоставлять для него распределитель пула, если производительность вызывает сомнения.
Kylotan
5

Мне понравился Chaiscript ; Я не использовал его очень долго, но пока он выглядит довольно солидным.

В отличие от Python или lua, он построен с нуля для использования с C ++. Процесс связывания выглядит намного чище, чем с luabind / etc.

Вот резюме на сайте:

ChaiScript - это первый и единственный язык сценариев, разработанный с нуля с учетом совместимости с C ++. Это вдохновленный ECMAScript встроенный функционально-подобный язык.

ChaiScript лицензируется по лицензии BSD.

Райли Адамс
источник
Интересный. Как насчет тестов производительности? Есть ли какие-либо сравнения ChaiScript / Lua / Python?
topright
Довольно интересно, есть ли какие-то недостатки / ошибки / производительность, через которые вы прошли до сих пор?
Фредерик Имбо
Я не видел каких-либо тестов, но у меня еще не было проблем с производительностью ... моя главная задача до сих пор заключалась в том, что он не конвертируется между числовыми типами неявно (поэтому вы получаете ошибку, если передаете int в функция с плавающей точкой и т. д.).
Райли Адамс
1
Просто к сведению, так как этому комментарию уже 6 лет - ChaiScript сейчас делает неявные числовые преобразования.
lefticus
5

Я бы порекомендовал Lua .
Питон тоже очень популярен. Его используют многие игровые движки (например, Blender).
C ++ :: Boost имеет библиотеку для работы с Python.
Я читал про Белку , но не использовал ее.

Вы можете прочитать этот обзор Game Engine . Есть Scriptingколонка. Вы можете видеть, что Lua и Python являются наиболее популярными языками сценариев.

в правом верхнем углу
источник
Что касается Boost, я думаю, что это огромная библиотека, и многие вещи не совсем полезны во всех проектах. На самом деле luabind часто использует Boost, и это одна из вещей, которые мне не нравились.
Фредерик Имбо
1
Я бы сказал, что это преимущество. У вас есть много много решений из коробки. И у вашего проекта есть только 1 внешняя зависимость - Boost. Не так много маленьких библиотек (которые используют разные стили, подходы, лицензии и, в свою очередь, могут иметь внешние неявные зависимости), которые трудно обновлять, синхронизировать с вашим кодом и обслуживать.
topright
1
И вы включаете только те библиотеки Boost (заголовки), которые вам нужны. Повышение огромно, но вам все равно, пока вам не понадобится то или иное.
topright
А что касается python и Lua, существуют ли обертки для C ++, которые позволяют переопределять методы класса, создавать новые методы и т. Д.? И можно ли управлять этой функцией из кода C ++ (для безопасности)? Как я уже сказал, LuaBind делает эти вещи, но терпит неудачу в контексте наследования, что довольно часто встречается в игровом проекте. Методы, которые я хотел бы переопределить, например, тестируют определенный игровой цикл, методы обновления сущностей, таких как игрок, метод обновления самого игрового мира и т. Д.
Frédérick Imbeault
У Lua нет классов и объектов, но их можно эмулировать с помощью таблиц. Вот библиотека Lua для ООП, которую я предпочитаю: love2d.org/wiki/MiddleClass .
topright
4

Почему бы не построить свой собственный?

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

преимущества

  1. Вы узнаете об интересной части информатики.
  2. Разработав «собственный» механизм сценариев, он дает вам полный контроль от начала до конца, позволяя адаптировать движок именно к тому, что вам нужно.
  3. Если вам понадобится внести какие-либо изменения в будущем, они могут сделать несколько проще, зная входные и исходные данные вашей собственной кодовой базы, чем изучая входные и выходные данные кого-то другого.
  4. Вам не придется беспокоиться о том, чтобы поддерживать ваш движок в актуальном состоянии с чужими патчами.

Недостатки

  1. Время. Не у многих это есть. Если вам нужно что-то СЕЙЧАС, попробуйте уже существующий движок (как один из уже предложенных).

  2. Скорость. Многие существующие скриптовые движки работают очень быстро - индивидуальное решение может быть не таким быстрым.

  3. Размер команды. Многие существующие скриптовые движки имеют большие группы людей, работающих над базой кода, будь то частные команды или глобальные добровольцы, есть что-то, что можно сказать о коде, который проверяется и перепроверяется многими другими людьми.

  4. Механизм сценариев требует определенного объема первоначального планирования для эффективного выполнения. Существует много основ, которые также должны быть реализованы, которые могут вообще не иметь отношения к фактическому скриптовому движку.

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

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

Я понимаю, что людям нравится разбрасываться словами «лень» и «не изобретать велосипед», но я думаю, что можно кое-что сказать об изучении того, как это делается. И конкретная реализация, вероятно, будет лучше для вашего проекта, чем общая реализация.

«Создание систем сценариев в C ++», кажется, является любимой статьей (статьями), которой люди делятся при обсуждении темы: http://www.gamedev.net/reference/list.asp?categoryid=76

Далин Сейврайт
источник
2
Я согласился, что это имеет особое образовательное преимущество. Тем не менее, это требует определенных знаний и навыков в теории языков программирования (которые многие думают, что они имеют) и некоторые знания в области теории вычислений. Если это ответит на интересующие кого-то вопросы, я бы предложил эти две книги: amazon.com/gp/product/0136073476/ref=oss_product и amazon.com/gp/product/0534950973/ref=oss_product
Фредерик Имбо
Вы будете удивлены, насколько далеко вы сможете зайти, не зная об этих вещах. У многих MUD есть язык сценариев, который представляет собой не что иное, как список операторов с некоторыми хаки для включения условных выражений, и все же они могут многого достичь с помощью этого.
Kylotan
Был там, сделал это. Много узнал о разборе, дизайне компилятора, машинах с байт-кодом и тому подобном. В следующий раз я, вероятно, буду использовать Lua и буду благодарен за это. :)
Kaz Dragon
2

Я пробовал Lua, Python, Scheme и Squirrel. Луа работал лучше всего; у него более широкое сообщество и лучшая поддержка, чем у Squirrel, и гораздо лучшие характеристики памяти и производительности, чем у Python. Схема тоже работала очень хорошо, и у нее был крошечный интерпретатор, но дизайнерам было трудно обдумать функциональный язык.

Crashworks
источник