Как добавить язык сценариев в игру?


25

Допустим, у меня есть игра, написанная на C ++. Но я хочу добавить в него некоторые функции моддинга или скриптинга. Как можно было бы добавить функциональность сценариев в вашу игру?


Самый популярный язык: см. Lua (язык программирования) и Lua (язык программирования) - C API Пример: у IBM есть отличная статья на эту тему: Встраивание LUA
Тамара Вийсман

Точные шаги в значительной степени зависят от языка, который вы хотите добавить. Посмотрите на gamedev.stackexchange.com/questions/11/…
tenpn

Ответы:


27

Прежде всего, вы должны решить, какая часть вашей игры написана на скрипте. Один из вариантов - иметь полностью скриптовую игру в том смысле, что хотя критичные ко времени бэкэнд-операции кодируются в C ++, вся логика игры написана на языке сценариев. Дизайнеры используют бэкэнд в качестве API, вызываемого из языка сценариев высокого уровня. С другой стороны, у вас может быть несколько конкретных мест, где используются скрипты, такие как пользовательский интерфейс или скриптовые последовательности, при этом большая часть игрового кода все еще находится на C ++. У каждого подхода есть свои преимущества (скорость, гибкость, время компиляции, объем игры и т. Д.), Но вы должны решить это заранее.

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

Lua - популярный легкий и простой в использовании язык сценариев. Он использует стек для связи между хостом и встроенным языком, и он был успешно использован во многих профессиональных играх . Sol2 упрощает процесс связывания Lua и C ++. Если вам не нравится синтаксис Lua, Moonscript - это язык, который компилируется в Lua и добавляет хороший набор функций.

Другие опции включают AngelCode , который позволяет напрямую вызывать функции C и C ++. Python и Ruby немного сложнее встраивать, но их очень приятно программировать. Если вы хотите встроить Python, взгляните на Boost.Python . Еще одна идея - встроить JavaScript, чтобы использовать преимущества быстрых скриптовых движков, разработанных для браузеров (см. V8 и SpiderMonkey ).


2
Я реализовал язык сценариев для моего текущего игрового проекта, и основное преимущество - полный контроль над языковыми примитивами. Готовые решения для сценариев являются общими, и вам могут не понадобиться все функции, которые они предоставляют. Вы абсолютно не должны думать о переходе на свой собственный язык, если вы не уверены, что можете сделать что-то, что лучше для вашей игры, чем существующее решение.
Джон Перди

Лично мне нравится Guile , он прекрасно интегрируется с C. Единственная проблема - скорость, но с выпуском 2.0 в ближайшие пару месяцев это тоже должно улучшиться.
Джо Д

Отличный ответ. Первый абзац можно резюмировать как «разработчики игр создают API, который используется для контента».
ashes999

Общий термин для пользовательских языков (сценариев или других) - DSL, который может помочь узнать, хотите ли вы читать.
Патрик Хьюз

2

Я написал пост о встраивании скрипта GameMonkey в игру с использованием DragonFire SDK здесь .

По сути, идея состоит в том, чтобы предоставить ваши функции C \ C ++ выбранному вами языку сценариев и использовать их из вашего сценария. В моем уроке я раскрыл 2 функции из DragonFire SDK. В начале игры я вызываю функцию onStart из скрипта, а при обновлении вызываю функцию onTimer из скрипта.

Надеюсь, это поможет!


1
Я также загрузил демо-видео здесь: bit.ly/dnCkar
astk
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.