Как я могу реализовать скрипты в моей игре? - PullRequest
4 голосов
/ 07 декабря 2009

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

Моя проблема в том, что я не знаю, как скрипты должны взаимодействовать с игрой. Я использую язык сценариев angelscript .

Прямо сейчас у меня есть состояние: состояние вступления, которое я использую в качестве теста для большинства модулей в моем игровом «движке» (это больше похоже на свободную коллекцию классов). Он будет загружать и рисовать картинку, рисовать текст и использовать сценарии для обновления, а затем, возможно, переключится в фиктивное состояние для проверки менеджера состояний.

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

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

Или есть способ добиться совместимости скриптов и программ, который я пропускаю. В любом случае, может ли кто-нибудь помочь мне понять, каков наилучший способ внедрения сценариев в мою игру?

Ответы [ 4 ]

6 голосов
/ 07 декабря 2009

Нет правильного ответа на такой большой вопрос. Вы делаете это так же, как и в C ++. Определите API, который может вызывать скрипт, который позволяет ему делать то, что вы хотите. Зарегистрируйте функции в этом API с помощью сценария и используйте API в angelscript. Каким должен быть этот API, полностью зависит от ваших потребностей и от того, какую силу вы хотите дать сценаристу.

3 голосов
/ 07 декабря 2009

Если вы хотите, чтобы AngelCode (или любой другой подход на основе сценариев по вашему выбору) просто «придумал несколько цифр», эй, используйте его таким образом - например, в AngelCode скомпилируйте сценарии, выставив им один C ++ вашей функции, скажите «void ProvideNumberFor (строковая причина, числовое значение)», и сценарии будут отвечать за вызов этой функции столько раз, сколько необходимо для «предоставления чисел», и ничего более.

2 голосов
/ 08 декабря 2009

Если вы посмотрите на реальные примеры, такие как мод Гарри или игры, написанные на UnrealScript, вы обнаружите, что в сценариях реализовано немало логики в современных играх. Код C / C ++ лучше всего подходит для «статических» и склонных к узким местам частей движка, таких как рендерер, физический движок, низкоуровневые сети и т. Д. Скрипты лучше всего подходят для контента (т. Е. Игровой логики).

В сторону: лучший язык сценариев игры IMHO - Lua . Он обеспечивает простую интеграцию с C / C ++, очень хорошо документирован и знаком пользователям Javascript.

Я использовал Lua именно для этой цели, и он отлично работает. Посмотрите на все игры, запрограммированные с использованием Lua. Кроме того, это невероятно быстро.

РЕДАКТИРОВАТЬ: Я не прочитал вопрос полностью ... извините. Это мой настоящий ответ;)

2 голосов
/ 07 декабря 2009

Если вы знакомы с Qt4 / Javscript, вы всегда можете использовать QtScript http://qt.nokia.com/doc/4.5/qtscript.html.

...