Использование LuaInterface с VB.net - PullRequest
3 голосов
/ 15 сентября 2011

Я пытаюсь подключить Lua к моей игре на VB.net, которую я создаю. Теперь я прочитал достаточно, чтобы знать, что я могу подключить каждую функцию отдельно, как показано здесь:

pLuaVM.RegisterFunction("quit", pPrg.GetType(), pPrgType.GetMethod("quit"))

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

Функция RegisterFunction выглядит просто небрежно и недостаточно.

Спасибо за любую помощь!

1 Ответ

1 голос
/ 30 сентября 2011

Мой первый совет - не использовать LUAInterface;поскольку он не кроссплатформенный, а вместо этого использовать IronPython, который так же легко подобрать, как LUA, и будет работать на Windows и OSX, в зависимости от того, как вы пишете свою игру;XNA и OpenTK должны работать в кроссплатформенном режиме под моно для графического движка.

Я узнал об этом сам, когда экспериментировал с LUA для моей собственной игры на основе vb.net, и в итоге решил использовать железный питон.* Но при условии, что вы хотите придерживаться LUA;вот что вы можете попробовать.

Исходя из того, что вы знаете: любой написанный на vb.net код не может быть изменен после выполнения, вы можете сделать что-то вроде этого:

Public Shared Lua as New LuaInterface

Sub Game()
Dim LuaCaller as New LuaAccess
Lua("LuaAccess") = LuaCaller
End Sub

Public Class LuaAccess 
    Public Sub Grant(NewClass as String, Variable as String)
        Select Case NewClass
               Case "LuaAccess"
                    Lua(Variable) = New LuaAccess
    End Sub
End Class

Затем из Lua:

LuaAccess:Grant("LuaAccess", "MyNewLuaAccess")

Вы можете добавить новый регистр для каждого класса, для которого вы хотите, чтобы lua мог создать экземпляр;и использовать это для создания новых экземпляров классов.если вы хотите, чтобы он мог изменять активный класс, используемый основной программой, просто сделайте подпрограммы, или переменные, или оба в общем классе

Public Shared MyVar as Integer

Таким образом, существует только одна копияпеременная, которую может изменить любая часть приложения (даже Lua).

Хотя, честно говоря, IronPython действительно больше подходит для такого рода вещей и все еще активно разрабатывается, в отличие от LuaInterface.

помните одну вещь;когда дело доходит до сценариев, вы на самом деле не хотите слишком сильно контролировать движок сценариев;когда дело касается игр, вы даете им доступ ко всему, что может сделать ваш движок;и это может быть использовано для обмана, если вы не будете осторожны.

удачи, и я надеюсь, что я помог.

На основе среды выполнения LuaInterface v2.0.50727 (тот, который использует Lua51.dll)

...