1

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

2 回答 2

1

文档表明Stage.addChild除了添加的对象必须是 Sprite 之外,没有错误条件。TextField继承 Sprite 所以没有明显的理由让你得到这个错误。但是,您不应将 的返回值重新分配给与类delayedCall同名的全局变量Timer,这可能会影响应用程序的其他部分。由于您不使用返回的Timer实例,因此我删除了分配。此外,如果stage:addChild成功则removing可以使用 stage. 奇怪的一件事是你onEnter刚刚定义youLose()但不调用也不返回,这部分代码是你省略的吗?在任何情况下,您都需要添加一些健全性检查,以验证您认为正在发生的事情是否真的发生了 w/r/t 子添加/删除:

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
于 2014-05-15T01:28:08.000 回答
1

index nil错误意味着在该行上,您可能会nilLooserText:getParent().

为什么你会得到nil这个我不能告诉你,大概是因为它没有。

于 2014-05-14T16:59:15.140 回答