Добавление скриптов Lua к .NET-приложениям или играм
Вы когда-нибудь слышали о Lua? Этот скриптовый язык используется во многих играх, например, в World of Warcraft. Было бы здорово интегрировать скрипты Lua в ваши .NET-приложения, не правда ли? Я тоже так думаю…
Lua – всемирно известный скриптовый язык. Это облегченный мультипаридигменный язык программирования, спроектированный, в первую очередь, как скриптовый язык с расширяемой семантикой. В статье мы рассмотрим, как интегрировать Lua в приложения на C# , в первую очередь, в WPF-игры.
- 1 Введение
- 2 Введение в Lua и в LuaInterface
- 2.1 Скачать и пересобрать LuaInterface
- 3 Сборка проекта консольного примера –- LuaForCSharpTest
- 3.1 Пример 1 – доступ к глобальным переменным
- 3.2 Пример 2 – доступ к функциям и таблицам, определенным в Lua
- 3.3 Пример 3 – метод DoString
- 3.4 Пример 4 – вызов функции внутри таблицы
- 3.5 Пример 5 – вызов глобальной функции, возвращающей две величины
- 3.6 Пример 6 – проверка метода RegisterFunction
- 3.7 Пример 7 – Вызов других .lua-файлов, .NET-сборки и т. п.
- 4 Встраивание Lua в WPF-игры
- 4.1 Настройка Lua-скрипта
- 4.2 Программирование WPF на C#
- 5 Выводы
Статья освещает загрузку и компиляцию последней версии LuaInterface (управляемой сборки для Lua) и затем рассказывает о ее использовании.
Начинаем с простого консольного приложения:
Создание примера консольного приложения – LuaForCSharpTest
Сначала создадим новую консольную программу на C# и назовем ее LuaForCSharpTest. Чтобы читатели более ясно представили себе связи между основными компонентами, я создал папку LuaInterfaceStuff, в которой находятся два файла LuaInterface.dll и lua51.dll.
Теперь добавим ссылку на LuaInterface.dll в проекте, другая DLL должна быть автоматически скопирована в выходную папку вместе с ней
Как обычно, добавим ссылку на пространство имен, определенное в сборке:
Дальше введем связанные микропримеры один за другим:
Переходим к более сложным темам;
Пример 7 – Вызов других . lua -файлов, сборки . NETи т.п. …
Следующий пример представляет собой адаптированную версию онлайновых примеров (https://penlight.luaforge.net/packages/LuaInterface/). В большинстве из них вы увидите, как скрипты Lua внутри C# приложений могут взаимодействовать с библиотеками .NET и связанными структурами данных. Теперь, однако, вернемся к нашему примеру.
Сначала создадим файл скрипта Lua под названием Prompting.wlua, который выглядит следующим образом:
И, наконец, обсуждаем интеграцию в ваше приложение или игру:
Интеграция Luaв WPF -игры
Встроенный скриптовый язык может обеспечить вашему приложению большую гибкость и масштабируемость. Возьмем для примера одну из самых известных сетевых игр World of Warcraft. Она использует немногим более 200 K кода Lua, но тем не менее добивается очень высокой скорости вычислений. В настоящее время Lua может широко применяться на платформе Microsoft .NET для приложений (таких как WinForm, WebForm, WPF и т.п.), допускающих небезопасный код. Прекрасные возможности простоты использования (нет необходимости разбираться со сложной логикой центральных модулей), кросс-платформенности (однажды скомпилированный правильный скрипт без труда переносится на другие системы) и расширения по требованию (в части дополнения системы и обновления в тоже время ключевой роли) позволяют применять Lua в широком диапазоне областей разработки.
Начиная с этого раздела, давайте рассмотрим как заставить WPF-игры взаимодействовать с Lua.
Сначала запустим Visual Studio 2010 и создадим общее WPF-приложение с именем LuaInWPFGame на базе .NET 4.0.
Затем добавим ссылку в этом проекте на LuaInterface. В нашем случае мы используем вышеупомянутую готовую сборку LuaInterface.dll (вместе с дополнительным файлом lua51.dll).
После этого рассмотрим популярную сцену переговоров в WPF-игре в качестве вводного примера по внедрению Lua внутрь WPF-приложения.
Если вы полагаете, что добавление скриптов в вашу игру или приложение необходимо, чтобы вывести ее на новый уровень, или считаете, что будет круто включить Lua в своё приложение, эта статья обеспечит вам прекрасный старт…
Вот несколько ссылок, которые могут оказаться интересными: