2011-12-14 2 views
0

저는 VB.net에서 Lua를 통해 Lua를 사용하는 시스템을 만들고 있습니다. VB.net에서 다른 것과 똑같은 이벤트 하나를 제거하십시오.

함수와 루아에 이벤트를 연결하려면, 간단히 말해서 나는이 작업을 수행 할 수 있습니다 당신이 볼 수 있듯이, 나는 현재 기능을 '취소'할 수 lcc 변수를 사용하고

RegisterEvent("tick", function(nt) 
    if not lcc then return end 
     if nt>=tt then 
      f() 
      lcc=false 
     end 
    end) 

. 이것은 일종의 해킹이며, 함수는 여전히 불필요한 오버 헤드를 유발하여 호출됩니다. 이것은 내 '의 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 
내 루아에서 같은 것을 할 싶습니다

는 :

local lcc=RegisterEvent("tick", function(nt) 
    print("The Ticks Are Now At: "..nt) 
    if nt>5000 then 
     DisconnectEvent(lcc) 
    end 
end) 

문제는, 잘 모르겠어요 RegisterEvent Function/Sub를 어떻게 변경해야하며 DisconnectEvent를 어떻게 만들어야하는지.

도움 주셔서 감사합니다. 나는 이것이 내가 말하는 것을 이해하려고 애쓰는 것이 괴롭다는 것을 안다. 설명을 요청하는 의견을 자유롭게 게시하십시오. 나는 최선을 다해 그것을 시도하고 설명하려고 기꺼이 할 것입니다. LuaInterface이 처리의 기본 방식으로 어떤 종류가있는 경우 나뿐만 아니라 그에게 열려있어 :) 도움이 모든에서

뭐든지 위대하다!

답변

0

내가 틀렸다면 나를 수정하십시오. Dictionary (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 
관련 문제