Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Применение Lua скриптов в .NET с LuaInterface

Anna | 17.06.2014 | нет комментариев

Привет, Програпрогр!

Данный маленький пост родился позже того, как я решил узнать, как дозволено запускать скрипты Lua коллективно с игрой на C# (либо на ином .NET-языке). с применением библиотеки LuaInterface. Я был впечатлен легкостью этого интерфейса по сопоставлению с lua.h на C

image

Что необходимо знать

C# на порядочном ярусе, иметь представление об основах программирования, а также о подключении ссылок в плане на Visual Studio

Предисловие

Исходники (со всеми dll, безусловно) выложены в конце поста

Первое, что необходимо сделать — подключить к нашему плану LuaInterface.dll. Легко добавляем ссылку на файл .dll. Если вы еще не в курсе, как это делается, то можете обнаружить мануалы в интернете. Также для подключения требуется luanet.dll

Маленький ликбез

LuaInterface — библиотека для комфортной интеграции между Lua и CLR
Lua — дюже легкий скриптовый язык программирования. Вот его разбор
Для чего необходимы скрипты — выдержка из иного моего поста

Спрятанный текст

Если вы разрабатывали крупные планы (к примеру, масштабные игры), примечали, что с всякой новой сотней строк кода компиляция идет медленней?
В игре создается огромнее оружия, огромнее диалогов, огромнее меню, огромнее etc.
Одна из самых основных задач, возникающих в связи с нововведениями — поддерживать бессчетное уйма оружия и бейджиков достаточно трудное занятие.
В обстановки, когда просьба друга/босса/напарника изменить диалог либо добавить новейший вид оружия занимает слишком много времени, доводится прибегать к каким-то мерам — скажем, записи каждой этой фигни в отдельные текстовые файлы.
Примерно всякий геймдевелопер когда-нибудь делал карту ярусов либо диалоги в отдельном текстовом файле и потом их считывал. Взять правда бы примитивный вариант — олимпиадные задачи по информатике с файлом ввода

Но есть метод, на голову выше — применение скриптов.

Решение задачи

«Окей, для таких дел хватает обыкновенного файла с изложением характеристиков игрока. Но что делать, если в буйно прогрессирующем плане примерно всякий день доводится немного изменять логику основного игрока, и, следственно, много раз компилировать план?»
Отличный вопрос. В этом случае нам на поддержка приходят скрипты, держащие именно логику игрока со всеми колляциями либо какой-либо иной части игры.
Безусловно, комфортнее каждого удерживать, логику игрока в виде кода какого-нибудь языка программирования.
Первая мысль — написать свой интерпретатор своего скриптового языка, выкидывается из мозга через несколько секунд. Логика игрока определенно не стоит таких чудовищных расходов.
К счастью, есть особые библиотеки скриптовых языков для С , которые принимают на вход текстовый файл и исполняют его.

Об одном таком скриптовом языке Lua пойдет речь.
Если вы разрабатывали крупные планы (к примеру, масштабные игры), примечали, что с всякой новой сотней строк кода компиляция идет медленней?
В игре создается огромнее оружия, огромнее диалогов, огромнее меню, огромнее etc.
Одна из самых основных задач, возникающих в связи с нововведениями — поддерживать бессчетное уйма оружия и бейджиков достаточно трудное занятие.
В обстановки, когда просьба друга/босса/напарника изменить диалог либо добавить новейший вид оружия занимает слишком много времени, доводится прибегать к каким-то мерам — скажем, записи каждой этой фигни в отдельные текстовые файлы.
Примерно всякий геймдевелопер когда-нибудь делал карту ярусов либо диалоги в отдельном текстовом файле и потом их считывал. Взять правда бы примитивный вариант — олимпиадные задачи по информатике с файлом ввода

Но есть метод, на голову выше — применение скриптов.

Решение задачи

«Окей, для таких дел хватает обыкновенного файла с изложением характеристиков игрока. Но что делать, если в буйно прогрессирующем плане примерно всякий день доводится немного изменять логику основного игрока, и, следственно, много раз компилироrmark! // Lua, lua, lua } catch (LuaException err) { // Обработка ошибки }

Вызов способов из Lua

Для вызова способа из Lua нужно исполнить скрипт, выудить способ, и исполнять его когда понадобится.
Пример

lua.DoFile("file.lua")
LuaFunction func = lua["func"] as LuaFunction; // function func() {...} end
func.Call();

Также в Call(params object[] args) дозволено передавать входные параметры для функции
Тот же финт срабатывает и со значениями, только взамен LuaFunction используем string, int, double и так дальше

Добавочные материалы

  • Для таблиц в LuaInterface предусмотрен класс LuaTable, регистрируется в объекте класса Lua он как обыкновенная переменная, а запись переменных в саму таблицу немного чем отличается от записи переменных в самом Lua объекте
  • Также есть класс LuaDLL, применяемый для «низкоуровневой» работы с Lua (из lua.h). Толку от него немножко, и вряд ли кто-то использует его по-серьезному
    Пример

                LuaDLL.lua_open();
                LuaDLL.lua_createtable(luaState, 1, 1);
    

image
Символика Lua

image
Love2D — один из самых знаменитых движков на Lua

image
Мод для Minecraft на Lua

image
https://bitbucket.org/Izaron/luaforhabr/src
Начальный код

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB