字符串兼容性错误,尝试索引零值

时间:2014-05-13 23:30:18

标签: lua gideros

我正在使用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

2 个答案:

答案 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