Удалить одно событие, которое может быть точно таким же, как другие в VB.net
Я создаю систему на VB.net, которая использует Lua через LuaInterface.
Чтобы связать событие в 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 есть какой-то нативный способ справиться с этим, я тоже открыт для этого:)
Что-нибудь, чтобы помочь, отлично!
1 ответ
Поправьте меня если я ошибаюсь. Возможно, вам придется использовать 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