0

ゲーム内のキャラクターを制御するプログラムに取り組んでいます。ユーザーがゲーム用のプログラムで Lua スクリプトを記述できるようにしたいと考えています。

私のプログラムには、次のようにスクリプターに渡されるint変数があります。int SelfManaPclua_compiler["SelfManaPc"] = SelfManaPc;

この変数は、別のスレッドのメイン プログラムで非常に高速に変更されています。私の問題は、ポインターではなく、Lua スクリプターにのみ値を渡していることです。C# プログラムで値を変更した後、Lua スクリプトでは変更されなくなりました。

私は自分のソリューションを作成しましたが、それはかなりうまく機能します(SelfManaPc現在は自分のクラスのオブジェクトであるIntegerため、値の代わりにポインターを渡すことができます)。

C# クラス:

  public class Integer
    {
        int value;
        public Integer(int xd) { value = xd; }

        public void Set(int xd) {value = xd;}
        public int Get() { return value; }        
    }

Lua コードでの使用例:

while true do
    Say(SelfManaPc:Get())
    Sleep(2000);
end

他に方法がなければ、このままにしておきます。しかし、他のアイデアについては、まず皆さんにお聞きしたいと思いました。intでアクセスするGetのはちょっとばかげてSetいるので、いくつかの素晴らしいトリックを知っている人もいるかもしれません.

4

1 に答える 1

1

スクリプトにそのような変数が複数ある場合は、それらを単一のグローバル テーブルに配置することを検討できますoptions。次に、そのテーブルにメタ__indexテーブルを追加します。メタメソッドは、名前が指定された変数の値を返し、メタメソッドは、名前が__newindex指定された変数に新しい値を設定します。

これを実装する方法は、C# で使用しているバインディング ライブラリによって異なります。

Lua コードでの使用例:

while true do
    Say(options.SelfManaPc)
    Sleep(2000)
    options.SelfManaPc = 1000 -- sets new value
    Sleep(500)
end
于 2012-12-27T14:01:02.407 に答える