0

LuaInterface 経由で Lua を利用する VB.net でシステムを作成しています。

Lua のイベントを関数に関連付けるには、次のようにするだけです。

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

ご覧のとおり、現在lcc、関数を「キャンセル」するために変数を使用しています。これは一種のハッキングであり、関数は引き続き呼び出され、不要なオーバーヘッドが発生します。これは、VB.net で「RegisterEvent」サブがどのように見えるかです。

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 Function/Sub を変更する方法と、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 に答える