Допустим, у меня есть игра, написанная на C ++. Но я хочу добавить в него некоторые функции моддинга или скриптинга. Как можно было бы добавить функциональность сценариев в вашу игру?
Прежде всего, вы должны решить, какая часть вашей игры написана на скрипте. Один из вариантов - иметь полностью скриптовую игру в том смысле, что хотя критичные ко времени бэкэнд-операции кодируются в C ++, вся логика игры написана на языке сценариев. Дизайнеры используют бэкэнд в качестве API, вызываемого из языка сценариев высокого уровня. С другой стороны, у вас может быть несколько конкретных мест, где используются скрипты, такие как пользовательский интерфейс или скриптовые последовательности, при этом большая часть игрового кода все еще находится на C ++. У каждого подхода есть свои преимущества (скорость, гибкость, время компиляции, объем игры и т. Д.), Но вы должны решить это заранее.
Когда вы знаете, как вы хотите использовать сценарии, вам нужно решить, собираетесь ли вы использовать существующий язык сценариев или свой собственный предметно-ориентированный язык . Сегодня существует множество языков сценариев на выбор с различными целями дизайна и целевой аудиторией, поэтому я не уверен, стоит ли создавать свои собственные. Если вы решили реализовать свой собственный, вот несколько ресурсов:
Lua - популярный легкий и простой в использовании язык сценариев. Он использует стек для связи между хостом и встроенным языком, и он был успешно использован во многих профессиональных играх . Sol2 упрощает процесс связывания Lua и C ++. Если вам не нравится синтаксис Lua, Moonscript - это язык, который компилируется в Lua и добавляет хороший набор функций.
Другие опции включают AngelCode , который позволяет напрямую вызывать функции C и C ++. Python и Ruby немного сложнее встраивать, но их очень приятно программировать. Если вы хотите встроить Python, взгляните на Boost.Python . Еще одна идея - встроить JavaScript, чтобы использовать преимущества быстрых скриптовых движков, разработанных для браузеров (см. V8 и SpiderMonkey ).
Я реализовал язык сценариев для моего текущего игрового проекта, и основное преимущество - полный контроль над языковыми примитивами. Готовые решения для сценариев являются общими, и вам могут не понадобиться все функции, которые они предоставляют. Вы абсолютно не должны думать о переходе на свой собственный язык, если вы не уверены, что можете сделать что-то, что лучше для вашей игры, чем существующее решение.
Джон Перди
Лично мне нравится Guile , он прекрасно интегрируется с C. Единственная проблема - скорость, но с выпуском 2.0 в ближайшие пару месяцев это тоже должно улучшиться.
Джо Д
Отличный ответ. Первый абзац можно резюмировать как «разработчики игр создают API, который используется для контента».
ashes999
Общий термин для пользовательских языков (сценариев или других) - DSL, который может помочь узнать, хотите ли вы читать.
Патрик Хьюз
2
Я написал пост о встраивании скрипта GameMonkey в игру с использованием DragonFire SDK здесь .
По сути, идея состоит в том, чтобы предоставить ваши функции C \ C ++ выбранному вами языку сценариев и использовать их из вашего сценария. В моем уроке я раскрыл 2 функции из DragonFire SDK. В начале игры я вызываю функцию onStart из скрипта, а при обновлении вызываю функцию onTimer из скрипта.
Ответы:
Прежде всего, вы должны решить, какая часть вашей игры написана на скрипте. Один из вариантов - иметь полностью скриптовую игру в том смысле, что хотя критичные ко времени бэкэнд-операции кодируются в C ++, вся логика игры написана на языке сценариев. Дизайнеры используют бэкэнд в качестве API, вызываемого из языка сценариев высокого уровня. С другой стороны, у вас может быть несколько конкретных мест, где используются скрипты, такие как пользовательский интерфейс или скриптовые последовательности, при этом большая часть игрового кода все еще находится на C ++. У каждого подхода есть свои преимущества (скорость, гибкость, время компиляции, объем игры и т. Д.), Но вы должны решить это заранее.
Когда вы знаете, как вы хотите использовать сценарии, вам нужно решить, собираетесь ли вы использовать существующий язык сценариев или свой собственный предметно-ориентированный язык . Сегодня существует множество языков сценариев на выбор с различными целями дизайна и целевой аудиторией, поэтому я не уверен, стоит ли создавать свои собственные. Если вы решили реализовать свой собственный, вот несколько ресурсов:
Lua - популярный легкий и простой в использовании язык сценариев. Он использует стек для связи между хостом и встроенным языком, и он был успешно использован во многих профессиональных играх . Sol2 упрощает процесс связывания Lua и C ++. Если вам не нравится синтаксис Lua, Moonscript - это язык, который компилируется в Lua и добавляет хороший набор функций.
Другие опции включают AngelCode , который позволяет напрямую вызывать функции C и C ++. Python и Ruby немного сложнее встраивать, но их очень приятно программировать. Если вы хотите встроить Python, взгляните на Boost.Python . Еще одна идея - встроить JavaScript, чтобы использовать преимущества быстрых скриптовых движков, разработанных для браузеров (см. V8 и SpiderMonkey ).
источник
Я написал пост о встраивании скрипта GameMonkey в игру с использованием DragonFire SDK здесь .
По сути, идея состоит в том, чтобы предоставить ваши функции C \ C ++ выбранному вами языку сценариев и использовать их из вашего сценария. В моем уроке я раскрыл 2 функции из DragonFire SDK. В начале игры я вызываю функцию onStart из скрипта, а при обновлении вызываю функцию onTimer из скрипта.
Надеюсь, это поможет!
источник