0

我正在 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 函数/子以及我应该如何制作 DisconnectEvent。

谢谢你的帮助。我知道尝试理解我想说的话有点烦人。随时发表评论要求澄清。我将非常愿意尝试并尽我所能解释它。如果 LuaInterface 有某种本机方式来处理这个问题,我也对此持开放态度:)

任何能提供帮助的东西都很棒!

4

1 回答 1

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
于 2011-12-14T03:21:49.930 回答