我正在VB.net中创建一个通过LuaInterface使用Lua的系统。
要将Lua中的事件与函数相关联,我可以简单地执行此操作:
RegisterEvent("tick", function(nt)
if not lcc then return end
if nt>=tt then
f()
lcc=false
end
end)
如您所见,我目前正在使用lcc
变量来“取消”该功能。这是一种被黑客攻击,仍然会调用该函数导致不必要的开销。这就是我的'RegisterEvent'子在我的VB.net中的样子
Public Sub RegisterEvent(ByVal eventName As String, ByVal func As LuaFunction)
Select Case eventName.ToLower
Case "keydown"
AddHandler Me.event_keydown, AddressOf func.Call
Case "keyup"
AddHandler Me.event_keyup, AddressOf func.Call
Case "mousedown"
AddHandler Me.event_mousedown, AddressOf func.Call
Case "mouseup"
AddHandler Me.event_mouseup, AddressOf func.Call
Case "ready"
AddHandler Me.event_ready, AddressOf func.Call
Case "tick"
AddHandler Me.event_tick, AddressOf func.Call
Case "frame"
AddHandler Me.event_frame, AddressOf func.Call
End Select
End Sub
我想在我的Lua中做这样的事情:
local lcc=RegisterEvent("tick", function(nt)
print("The Ticks Are Now At: "..nt)
if nt>5000 then
DisconnectEvent(lcc)
end
end)
问题是,我不知道应该如何更改我的RegisterEvent函数/ Sub以及如何创建DisconnectEvent。
感谢您的帮助。我知道尝试理解我想说的内容有点烦人。随意发表评论,要求澄清。我将非常愿意尝试并尽我所能来解释它。如果LuaInterface有某种本地处理方式,我也会这样做:)
任何事情都可以提供帮助!
答案 0 :(得分:0)
如果我错了,请纠正我。您可能必须使用Dictionary(of String,boolean)来确定是否已附加事件。
Dim eventDict As New Dictionary(Of String, Boolean)
Public Sub RegisterEvent(ByVal eventName As String, ByVal func As LuaFunction)
Select Case eventName.ToLower
Case "keydown"
If Not eventDict.ContainsKey(eventName) Then
eventDict.Add(eventName,false)
End If
if eventDict(eventName) Then
RemoveHandler Me.event_keydown, AddressOf func.Call
eventDict(eventName)=false
Else
eventDict(eventName)=true
AddHandler Me.event_keydown, AddressOf func.Call
End If
...
End sub