将简单的整数转换为一个对象,可以通过引用传递到Lua脚本的代码中。

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

我的程序中有一个 int 变量 SelfManaPc,以这种方式传递给脚本器:lua_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

如果没有其他办法,我会把它留在那里。但是,我想先向你们中的任何人询问其他想法。用 GetSet 访问 int 有点愚蠢,所以你们中的一些人可能知道一些不错的技巧。

点赞
用户1008957
用户1008957

如果你的脚本中有几个这样的变量,可以考虑将它们放置在单个全局表内,例如命名为 options。然后你可以在该表中添加一个 元表__index 元方法返回给定名称的变量的值, __newindex 元方法根据给定的名称为变量设置新值。

如何实现这取决于你在 C# 中使用的绑定库。

使用 Lua 代码的示例:

while true do
    Say(options.SelfManaPc)
    Sleep(2000)
    options.SelfManaPc = 1000 -- 设置新值
    Sleep(500)
end
2012-12-27 14:01:02