是否可以在lua内部将数据存储在userdata块旁边?

时间:2019-01-25 21:27:12

标签: lua lua-table

我正在为一款名为Scrap Mechanic的游戏制作模块,并试图将零件轻松地相互交流。通常,这意味着创建一个全局表,用我要交流的变量填充该全局表,然后使用存储它的部分的ID从另一部分中检索它们。问题在于它笨重,我想知道是否有一种简单的方法可以使它工作。游戏lua API看起来像这样:

self = {interactable = {<interactable>, id = 1}, shape = {<shape>, id = 1}}

其中有更多,但主要部分是这些包含API的主要功能。我可以在两个使用函数之间进行交换,从游戏中获取数据并设置变量,例如块的输出(不幸的是,我只能设置1个变量和1个布尔值,这使得大量的转移变得困难)。 我遇到的问题是,当我尝试将值存储在self.interactable或self.shape中时,游戏中每个对象的值都会更改为该值,而不是仅将其放在userdata / metatable旁边(仍然不确定这2种方法对您有帮助吗?

现在,我尝试使用insertraw或其任何形式以及元表所涉及的其他函数来忽略表中可能存在的__newindex函数,但是我无法访问该库的那部分并且存在接缝网络上没有其他答案。我也很努力地从self.interactable检索自身部分,但是我只能使用可交互的方法(至少在游戏API中不是这样),无法从可交互的方法返回到自身,但这不是这里的问题,尽管回答这个问题将大有帮助,因为我实际上可以自行存储数据,而不会干扰其他部分。

function test1.server_onFixedUpdate( self, dt ) --code for one of the parts
    self.interactable.testValue = 1
end

function test2.server_onFixedUpdate( self, dt ) --code for another part
    print(self.interactable:getSingleParent().testValue) --returns the interactable of the connected part and accesses testValue
    print(self.interactable.testValue)
end

执行此操作时,您会期望输出读取1, nil,但它会读取1, 1,这表明testValue已放置在两个部分中。当打印self.interactable时,它仅打印{<interactable>, id = 1},这使我认为它将值存储在每个部分默认的metatable中。而使用insertraw( self.interactable, testValue, 1 )只会给我带来一个未知的全局错误(如果我在这里使用了错误的函数,请放心,我在代码中键入的是正确的)。

0 个答案:

没有答案