使用LuaInterface与VB.net

我正在为制作中的 VB.net 游戏连接 Lua。现在,我已经阅读到足够的信息,知道可以像这样将每个函数自己连接起来:

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

那么,我该如何让 Lua 脚本编写人员能够实例化类、更改这些类的属性等呢?

RegisterFunction 看起来很笨拙,不够用。

感谢任何帮助!

原文链接 https://stackoverflow.com/questions/7428988

点赞
stackoverflow用户963854
stackoverflow用户963854

我的第一个建议是不要使用 LUAInterface,因为它不是跨平台的,而是使用IronPython,这与LUA一样容易上手,并且可以在Windows和OSX上运行,这取决于你是如何编写你的游戏;XNA和OpenTK应该可以在mono下进行跨平台的图形引擎。

当我自己尝试使用LUA为我的基于vb.net的游戏尝试做实验时,我找到了这一点,并最终决定使用IronPython。

但是,假设你想坚持使用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希望能够创建实例的每个类添加一个新的case,并使用该类创建新的实例。 如果要修改主程序使用的活动类,则只需在类共享中制作子文件夹,变量或两者兼有。

Public Shared MyVar as Integer

这样只有一个变量副本,应用程序的任何部分(包括LUA)都可以修改。

虽然我必须承认IronPython确实更适合这种情况,并且仍在积极开发中,不像LUAInterface。

记住一件事;在编写脚本时,确实不希望赋予脚本引擎太多控制权;特别是在游戏方面,你要让它们访问你的引擎所能做的一切;如果不小心,这可能会被用来作弊。

祝你好运,希望我能有所帮助。

基于LuaInterface runtime v2.0.50727 (使用Lua51.dll)

2011-09-30 19:19:57