2011-12-14 2 views
0

私はVB.netでLuaを使ってLuaを利用するシステムを作成しています。 VB.netの他のイベントとまったく同じイベントを削除します

が機能してLuaのでイベントを関連付けるには、私は単にこれを行うことができます:あなたが見ることができるように、私は現在、機能を「キャンセル」する 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 

にどのようなものか、私は私の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

私が間違っている場合は私を修正してください。イベントが接続されているかどうかを判断するには、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 
関連する問題