尝试索引字段'other'

时间:2014-03-04 08:41:47

标签: lua corona

这是什么问题?这段代码应该在我拍摄后删除文本,同时增加分数。此外,有人可以解释other.name实际上是什么意思吗?我不太了解它..(是的,它是第一个有错误的if语句)

function wordCollision(e)
    if (e.other.name == 'balloonText') then -- error here: attempt to index field 'other'(a nil value)

        display.remove(e.other)
        e.other = nil

        score.text = score.text + 50
        score.anchorX = 0
        score.anchorY = 0
        score.x = 200
        score.y = 50

        target.text = target.text - 1
    else
        if  (e.other.name == 'balloonTextt') then

            display.remove(e.other)
            e.other = nil

            score.text = score.text + 50
            score.anchorX = 0
            score.anchorY = 0
            score.x = 200
            score.y = 50

            target.text = target.text - 1
        end
    end
end

2 个答案:

答案 0 :(得分:1)

这只是表示表'other'中没有关键e的条目。

如果您要在e.other中查找某些内容,则必须为该密钥分配一个表格:

e.other = {}

使用元表,您可以自动进行:

mt = {}
mt.__index=function(t,k) if ~rawget(t,k) then t[k]=setmetatable({},mt) end return t[k] end
e={}
e=setmetatable(e,mt)
e.other.name='foo'

注意这一点,因为对不存在字段的任何查找都会为它创建一个新表,这可能是你想要的,也可能不是你想要的(除了这会覆盖e上任何现有的metatable):

for k,v in pairs(e) do print(k,v) end
print(e.bar)
for k,v in pairs(e) do print(k,v) end

答案 1 :(得分:0)

问题可能是你有e.other = nil,但是之后没有将e.other重置为某些东西,所以当再次调用wordCollision()时,它是e.other零。也可能是e.other从未初始化。验证它是否在调用wordCollision()之前的某个位置初始化,并验证它是否在两次wordCollision()调用之间重新设置。