3

作成中の VB.net ゲームに Lua を接続しようとしています。ここで、ここに示すように、各関数を単独で接続できることを十分に理解しました。

pLuaVM.RegisterFunction("quit", pPrg.GetType(), pPrgType.GetMethod("quit"))

さて、Lua スクリプターがクラスをインスタンス化したり、それらのクラスのプロパティを変更したりできるようにするにはどうすればよいでしょうか。

RegisterFunction は、ずさんで十分ではないようです。

助けてくれてありがとう!

4

1 に答える 1

1

私の最初のアドバイスは、LUAInterface を使用しないことです。クロス プラットフォームではなく、代わりに、LUA と同じくらい簡単に習得でき、ゲームの作成方法に応じて Windows と OSX で実行される IronPython を使用します。XNA と OpenTK は、グラフィック エンジンの mono の下でクロス プラットフォームで動作するはずです。

自分のvb.netベースのゲームでLUAを試したときにこれを自分で見つけ、最終的に鉄のpythonに決めました。

ただし、LUA を使い続けたいと仮定すると、次のようになります。ここにあなたが試すことができるものがあります。

あなたが知っている事実に基づいて:書かれたvb.netコードは実行後に変更することはできません。次のようなことができます:

Public Shared Lua as New LuaInterface

Sub Game()
Dim LuaCaller as New LuaAccess
Lua("LuaAccess") = LuaCaller
End Sub

Public Class LuaAccess 
    Public Sub Grant(NewClass as String, Variable as String)
        Select Case NewClass
               Case "LuaAccess"
                    Lua(Variable) = New LuaAccess
    End Sub
End Class

次にルアから:

LuaAccess:Grant("LuaAccess", "MyNewLuaAccess")

lua でインスタンスを作成できるようにするクラスごとに、新しいケースを追加できます。それを使用して、クラスの新しいインスタンスを作成します。メインプログラムで使用されているアクティブなクラスを変更できるようにしたい場合は、クラス内のサブルーチン、変数、またはその両方を共有するだけです

Public Shared MyVar as Integer

そうすれば、アプリケーションの任意の部分 (Lua を含む) が変更できる変数のコピーが 1 つだけになります。

正直に言うと、LuaInterface とは異なり、IronPython はこの種のものにより適していて、現在も活発に開発されています。

一つ覚えておいてください。スクリプトに関して言えば、スクリプト エンジンにあまり多くの制御を与えたくないでしょう。特にゲームに関して言えば、エンジンが実行できるすべてのものへのアクセスをゲームに与えることになります。注意しないと、不正行為に使用される可能性があります。

頑張ってください。私がお役に立てば幸いです。

LuaInterface ランタイム v2.0.50727 (Lua51.dll を使用するもの) に基づく

于 2011-09-30T19:19:57.403 に答える