这是什么问题?这段代码应该在我拍摄后删除文本,同时增加分数。此外,有人可以解释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
答案 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()
调用之间重新设置。