3

我正在尝试将 Lua 连接到我正在制作的 VB.net 游戏。现在,我已经阅读了足够多的内容,知道我可以像这里看到的那样自行连接每个函数:

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

现在,我将如何使我的 Lua 脚本编写者能够实例化类、更改这些类的属性等。

RegisterFunction 看起来很草率而且还不够。

谢谢你的帮助!

4

1 回答 1

1

我的第一条建议是不要使用 LUAInterface;因为它不是跨平台的,而是使用 IronPython,它和 LUA 一样容易上手,并且可以在 Windows 和 OSX 上运行,具体取决于您编写游戏的方式;XNA 和 OpenTK 应该在图形引擎的 mono 下跨平台工作。

我在自己的基于 vb.net 的游戏中使用 LUA 进行实验时发现了这一点,并最终决定使用 Iron python。

但是假设你想坚持使用 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 runtime v2.0.50727(使用Lua51.dll的那个)

于 2011-09-30T19:19:57.403 回答