尝试索引字段“other”

问题出在哪里?这段代码的作用是在我射击后删除文字,同时增加分数。还有,有人能解释一下e.other.name到底是什么意思吗?我不是很理解。。。(是第一个if语句有错误)

function wordCollision(e)
    if (e.other.name == 'balloonText') then -- 这里有错误:尝试索引一个空值“other”

        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
点赞
用户513763
用户513763

它的意思是表 e 中没有键值为 'other' 的条目。

如果你想要在 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 上的任何现有元表):

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
2014-03-04 13:37:51
用户869951
用户869951

可能的问题是你在里面设置了 e.other = nil,但是没有在之后将 e.other 重新设置为其他值,因此当再次调用 wordCollision() 时,e.other 将是 nil。也可能是 e.other 没有被初始化。在调用 wordCollision() 之前,请确认其在某个地方被初始化,并验证在两次调用 wordCollision() 之间它被重新设置为某个值。

2014-03-04 17:03:00