我正在为我目前正在使用 C# 开发的游戏创建一些 UI,并希望将所有内容公开给 Lua,以便我的美工人员无需在代码中执行任何操作即可进行小的调整。我正在使用 MoonSharp 将 Lua 脚本集成到我的项目中。
这是我目前拥有的 UIElement 包装器类:
UIElement = {};
UIElement.__index = UIElement;
setmetatable( UIElement, {
__index = function( self, key )
local codeElement = rawget( self, "__codeElement" );
local field = codeElement and codeElement[key];
if type( field ) == "function" then
return function( obj, ... )
if obj == self then
return field( codeElement, ... );
else
return field( obj, ... )
end
end;
else
return field;
end
end,
__call = function( cls, ... )
return cls.new( ... );
end,
} );
function UIElement.new()
local self = setmetatable( {}, UIElement );
self.__codeElement = BLU_UIElement.__new();
return self;
end
BLU_UIElement是我的 C# 类,它通过 MoonSharp API 公开给 Lua。它在直接操作对象时可以正常工作,并具有 SetPos、SetColor 等功能。
UIElement旨在成为我在 Lua 中的“类”,以包装和扩展我的 C# 对象。
当我在脚本的其他地方实例化一个 UIElement 并尝试调用一个函数(例如 SetPos)时,它确实正确地进入了 __index 函数。但是,rawget 调用始终返回 nil。它似乎也不是特定于 BLU_UIElement 的。我已经尝试了一些非常简单的事情,比如在构造函数中添加一个字符串 ID 值并尝试在 __index 函数中对其进行 rawget,但它也返回 nil。
我假设我只是做了一些不正确的事情,在类或对象本身上设置了亚稳态,但我不确定问题出在哪里。我一直在这里查看:http: //lua-users.org/wiki/ObjectOrientationTutorial以了解我做错了什么,但我什么也没想到。
我很欣赏这方面的任何指导,我已经研究了几天但没有弄清楚,并且在线搜索通常只会显示与我已经在做的类似的代码。
慕婉清6462132
饮歌长啸
相关分类