0

LuaInterfaceを(Lua経由で)利用してアプリケーション自体の多くの側面を制御するXNAアプリケーションを作成しました。

KeyboardStateXNAクラス(具体的にはオブジェクト)に拡張機能を追加しました。問題は、Luaで拡張関数を呼び出すと、エラーが発生すること です。フィールド「KeyDown」(userdata値)を呼び出そうとしました

これが私のLuaスクリプトです:

Game.Updated:Add(function(t)
    if Players.LocalPlayer.Controller.KeyboardState:KeyDown(KeyboardKey.W) then
        print("W key down")
    end
end)

そして、これがクラスを拡張する私のモジュールです:

Imports System.Runtime.CompilerServices
Module XNAExtensions
    <Extension()> _
    Public Function KeyDown(ByVal this As Microsoft.Xna.Framework.Input.KeyboardState, ByVal e As Integer) As Boolean
        Return this.IsKeyDown(e)
    End Function
End Module

私は何が間違っているのですか?

4

2 に答える 2

3

拡張メソッドはコンパイラの機能であり、フレームワークの機能ではありません。Luaからこれを呼び出すには、静的メソッドとしてXNAExtensionsモジュールを直接呼び出す必要があります。Luaは拡張メソッドを理解していません。

XNAExtensions:KeyDown(Players.LocalPlayer.Controller.KeyboardState, KeyboardKey.W)
于 2012-08-01T00:05:59.343 に答える
2

サブクラス化のように、拡張メソッドはクラスの実際の拡張ではありません。これは、ソースファイルを解析するときにC#およびVBコンパイラによって理解されるものですが、コンパイルされたバイトコードはまだ元のように見えますXNAExtensions.KeyDown(keyboardState, e)

Luaスクリプトから呼び出すには、拡張メソッドとしてではなく、静的クラスからメソッドにアクセスする必要があります。

于 2012-08-01T00:05:37.953 に答える