我正在使用Gideros并收到此错误:
main.lua:47: attempt to index a nil value
stack traceback:
main.lua:47: in function 'func'
[string "compatibility.lua"]:36: in function <[string "compatibility.lua"]:35>
我有这段代码,一旦显示文本,它就会给我上面提到的错误:我该如何解决这个问题?
function onEnter()
function youLoose()
local font2 = TTFont.new("billo.ttf", 20, "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
LooserText = TextField.new(font2, "You Loose , Try AGAIN?")
LooserText:setPosition(100, 100)
stage:addChild(LooserText)
Timer = Timer.delayedCall(1000, removing)
end --line 36
end
function removing()
LooserText:getParent():removeChild(LooserText) --line 47
end
答案 0 :(得分:1)
index nil
错误表示在该行上您可能会nil
作为LooserText:getParent()
的返回值。
为什么你会得到nil
因为我不能告诉你,大概是因为它没有。
答案 1 :(得分:1)
文档指出Stage.addChild
没有错误条件,只是添加的对象必须是Sprite。 TextField
继承了Sprite,因此没有明显的理由让您收到此错误。但是,您不应将delayedCall
的返回值重新分配给与Timer
类同名的全局变量,这可能会影响应用程序的其他部分。由于您没有使用返回的Timer
实例,因此我删除了该作业。此外,如果stage:addChild
成功,则removing
可以使用stage
。有一件事很奇怪,你的onEnter
只是定义youLose()
但是没有调用它或返回它,你省略了这部分代码吗?在任何情况下,您都需要添加一些健全性检查,以验证您认为发生的事情是否真的发生了w / r / t child add / remove:
function onEnter()
function youLoose()
local font2 = TTFont.new("billo.ttf", 20, "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
LoserText = TextField.new(font2, "You Lose , Try AGAIN?")
LoserText:setPosition(100, 100)
print('Stage num children:' .. stage:getNumChildren())
stage:addChild(LoserText)
print('Stage num children:' .. stage:getNumChildren())
print('LoserText is stage child #' .. stage:getChildIndex(LoserText))
Timer.delayedCall(1000, removing)
end
end
function removing()
print('Stage num children:' .. stage:getNumChildren())
print('LoserText is stage child #' .. stage:getChildIndex(LoserText))
stage:removeChild(LoserText)
print('Stage num children:' .. stage:getNumChildren())
end