【发布时间】:2015-01-27 07:27:44
【问题描述】:
我一直试图弄清楚如何从“预编译”的 LuaFunction 调用 Lua 函数。一般的想法是我想从 C# 调用 Lua 函数。我可以通过使用 Lua.RegisterFunction() 来做相反的事情,但是很好。
最终发生的是回调返回 null,也就是在使用“Lua.LoadFile()”时,实际函数似乎没有被读取或存在。我还不确定如何设置它。
所以要在 VB.net 中初始化 Lua 脚本,我使用了一个具有以下内容的类:
Private state As Lua
Private luafunction As LuaFunction
Public Sub New(ByVal playerInstance As PlayerClass)
Me.playerInstance = playerInstance
state = New Lua()
state.RegisterFunction("PrivateMessage", Me, Me.GetType().GetMethod("PrivateMessage"))
state("playerID") = Me.playerInstance.Index
luafunction = state.LoadFile(SkillsFolder & "script.lua")
End Sub
luafunction 是预编译的脚本。我想使用 LoadFile,因为它被多次调用,并且 LoadFile over DoFile 更有效。
我这里有调用函数:
Public Function ProcessAttack() As Boolean
Dim luaFunc As LuaFunction = state.GetFunction("AttackProcess")
If luaFunc IsNot Nothing Then
Dim processed As Object = luaFunc.Call()
Return processed(0)
End If
Return False
End Function
显然 luaFunc 是空/空。在这里实际上不起作用。 LUA脚本如下:
function AttackProcess()
PrivateMessage(playerID, "Test!")
return true
end
这是一个非常基本的脚本。这个想法是,当玩家“攻击”时,它应该首先调用 Lua 脚本来查看该函数是否存在并且可以在 Lua 中处理,否则 C# 将在它选择的默认方法中处理它。 (所以如果处理了,AttackProcess() 将返回 true,然后 C# 编码处理基本攻击的句柄将不会被调用。)
我有一种感觉 Dim luaFunc As LuaFunction = state.GetFunction("AttackProcess") 几乎什么都没有搜索,我可能需要使用预编译的变量,即“luafunction”来拉它,但我一直不知道如何获取Lua 被 C# 调用。
谢谢。
【问题讨论】: