【问题标题】:Using LuaInterface with VB.net在 VB.net 中使用 LuaInterface
【发布时间】:2011-09-15 09:52:40
【问题描述】:

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

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

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

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

感谢您的帮助!

【问题讨论】:

  • 您阅读过文档吗? www.lua.inf.puc-rio.br/luanet/luainterface/luainterface.pdf。了解userdata Lua 类型

标签: vb.net luainterface


【解决方案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 运行时 v2.0.50727 (使用Lua51.dll的那个)

【讨论】:

    猜你喜欢
    • 2015-01-27
    • 2011-03-24
    • 2010-12-04
    • 1970-01-01
    • 2023-04-10
    • 2011-12-10
    • 2014-09-15
    • 1970-01-01
    • 2014-09-15
    相关资源
    最近更新 更多