3

我是一名新手程序员,刚开始使用 lua 和 Defold,基本上我有一个名为 objects 的表,后来在代码中我使用方法对循环遍历表,在那个 for 循环中我尝试访问该项目并使用它,但我收到一条错误消息:

ERROR:SCRIPT: level/controller.script:57: attempt to index local 'lvlObj' (a userdata value)

无论如何,我想知道这个错误是从何而来的,以及如何解决它。(pipe_reset 是一个布尔变量,应该与错误无关)

pipe_reset = false

local objects = {}

...稍后在代码中

if pipe_reset then
    for k in pairs(objects) do
        local lvlObj = objects [k]
        lvlObj.delete()
        objects [k] = nil
    end 
    pipe_reset = false
end
4

2 回答 2

2

您收到此错误是因为您尝试索引不可索引的用户数据类型。

我不知道 Defold,但我在它的 API 参考中搜索了 delete() 函数。我发现的唯一一个是 go.delete()

由于您没有提供足够的信息,我只能假设这是您要使用的功能。

详情请参考http://www.defold.com/ref/go/#go.delete%28%5Bid%5D%29

delete 不是您的对象类型的成员,而是表的成员。所以你很可能不得不调用 go.delete() 。go.delete() 接受一个可选的 id。还有一个函数go.get_id()。

我想你可以做类似的事情

local id = go.get_id(myFancyObject)
go.delete(id)

或者也许你的对象已经是那个 id?所以

go.delete(myFancyObject)

可能也有效

也许只是在你的例子中尝试:

for _, id in objects do
  go.delete(id)
end
于 2016-04-13T18:31:13.413 回答
1

如果 x 是一个表,则只能使用“xy”(它相当于 x["y"]),但显然不是。如果它应该是一个带有“删除”键的表,我会查看该表的创建位置,或者查看对象中是否有任何非表值。如果不是,我会尝试table.remove()改用。

于 2016-04-13T16:17:10.810 回答