Допустим, у меня есть игра, написанная на C ++. Но я хочу добавить в него некоторые функции моддинга или скриптинга. Как можно было бы добавить функциональность сценариев в вашу игру?
Допустим, у меня есть игра, написанная на C ++. Но я хочу добавить в него некоторые функции моддинга или скриптинга. Как можно было бы добавить функциональность сценариев в вашу игру?
Ответы:
Прежде всего, вы должны решить, какая часть вашей игры написана на скрипте. Один из вариантов - иметь полностью скриптовую игру в том смысле, что хотя критичные ко времени бэкэнд-операции кодируются в 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 из скрипта.
Надеюсь, это поможет!