将简单int更改为可以通过引用传递给Lua脚本编写器的对象

时间:2012-12-27 11:49:25

标签: c# lua runtime

我正在开发一个控制游戏角色的程序。 我希望我的用户能够在我的游戏程序中编写Lua脚本。

我的程序int中有一个int SelfManaPc变量,它以这种方式传递给脚本编写者:lua_compiler["SelfManaPc"] = SelfManaPc;

这个变量在我的主程序中以不同的线程快速更改。 我的问题是,它只将值传递给Lua脚本编写器,而不是指针。 在C#程序中更改值后,在Lua脚本中它不再更改。

我已经完成了我的解决方案并且效果非常好(SelfManaPc现在是我自己的类Integer的对象,因此我可以传递指针而不是值。)

C#class:

  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

如果没有别的办法,我会这样离开。但是,我想先问你们任何其他想法。使用intGet访问Set有点愚蠢,所以你们中的一些人可能会知道一些不错的伎俩。

1 个答案:

答案 0 :(得分:1)

如果脚本中有多个此类变量,则可以考虑将它们放在单个全局表中,例如名为options。然后向该表添加 metatable __index metamethod返回给定其名称的变量的值,__newindex metamethod为给定名称的变量设置新值。

如何实现这取决于您用于C#的绑定库。

在Lua代码中使用的示例:

while true do
    Say(options.SelfManaPc)
    Sleep(2000)
    options.SelfManaPc = 1000 -- sets new value
    Sleep(500)
end
相关问题