Цель использования скриптовых языков в gamedev

Добрый всем день. Сегодня хотелось бы поговорить о том, зачем практически в каждый игровой движок встраивается возможность работы со скриптовыми языками.

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

Итак, почему же я решил написать эту статью на совершенно не профильную для меня тему? Несколько лет назад я случайно попал на собеседование на вакансию начинающий разработчик игр на android. Человек, который устроится на данное место, должен был писать скрипты на Lua, если мне не изменяет память, и допиливать движок на c++. Меня начали спрашивать, какое из двух данных направлений мне ближе, а я даже ответить ничего не смог: ведь я понятия не имел, зачем используются языки сценариев в разработке игр.

Итак, причины использования скриптовых языков при разработке игр:

  • Используя языки сценариев, вы можете изменять игровую логику, настройку игры и прочие параметры без необходимости перекомпиляции. Это очень круто, ведь перекомпиляция может занимать часы.
  • Скриптовые языки позволяют создать редактор уровней и модулей, которыми смогут пользоваться, как люди внутри компании, так и просто энтузиасты. Редактор уровней создаёт скрипт, который можно легко подгрузить в игру опять-таки без перекомпиляции.
  • Скриптовые языки — это просто, по крайне мере, это проще, чем с++. В связи с этим, места игры, которые не являются узкими, можно отдать на откуп начинающим программистам, которые обходятся дешевле компании.
  • Языком сценариев нельзя убить игру. То есть, он выполняется в своем интерпретаторе, и даже если скрипт содержит ошибки, то игра не упадёт, а продолжит работать.
  • Скриптовые языки позволяют переиспользовать игровой движок. То есть, скрипты позволяют разделить слои логики игры и логики игрового движка.

В заключении, пример использования Lua в C (код из википедии):
[sourcecode language=»php»]
#include
#include
#include
#include

int main()
{
lua_State *L = luaL_newstate();
if (luaL_dostring(L, «function foo (x,y) return x+y end»)) exit(1);
lua_getglobal(L, «foo»);
lua_pushinteger(L, 5);
lua_pushinteger(L, 3);
lua_call(L, 2, 1);
printf(«Result: %d\n», lua_tointeger(L, -1));
lua_close(L);
return 0;
}
[/sourcecode]

Категории: Программирование

Метки: ,