零价值,尝试了一切

时间:2014-02-07 15:05:51

标签: lua corona

我有nil变量的问题。它经常发生在我身上,因为我是lua的初学者。这是我收到的错误消息:

attempt to index global 'popUp_circle' (a nil value) stack traceback

我正在使用的代码:

function popUp(header, text)
    local popUp_overlay = display.newImageRect("images/transparent_black.png", 480, 320)
        popUp_overlay.x = halfW
        popUp_overlay.y = halfH
        popUp_overlay.alpha = 0.3
        group:insert(popUp_overlay)

    local popUp_background = display.newImageRect("images/popUp.png", 300, 150)
        popUp_background.x = halfW
        popUp_background.y = halfH
        group:insert(popUp_background)

    local popUp_header = display.newText(header,0,0,native.systemFont,14)
        popUp_header.x = halfW+5
        popUp_header.y = halfH-47
        group:insert(popUp_header)

    local popUp_text = display.newText(text,0,0,native.systemFont,14)
        popUp_text.x = halfW
        popUp_text.y = halfH+10
        group:insert(popUp_text)

    local popUp_circle = display.newCircle( halfW+135, halfH-55, 8 )
        popUp_circle:setFillColor( 0 )
        popUp_circle.alpha = 0.3
        group:insert(popUp_circle)
        timer.performWithDelay( 100, timerCircle )
end

function onClickCircle()

end

function timerCircle()
    popUp_circle:addEventListener( "tap", onClickCircle )
end

2 个答案:

答案 0 :(得分:4)

popUp_circle被定义为popUp中的本地人,因此在timerCircle中未见。

答案 1 :(得分:2)

如果您要在另一个函数中使用popUp_circle,该函数必须现在可以访问。实际上,它是popUp函数的本地。从该函数返回popUp_circle并将其传递给timerCircle

function popUp(header, text)
    ...
    return popUp_circle
end

puc = popUp(header, text)
timerCircle(puc)

或者,将其设置为模块的本地:

local popUp_circle 

function popUp(header, text)
    ...
    popUp_circle = display.newCircle(...
    ... 
end

在这种情况下,没有必要将它返回或传递给timerCircle,这很诱人(代码较少),但是一旦你的模块变大,因为你为它增加了大量的逻辑;)很多模块globals将使调试更复杂。也就是说,如果将模块细分为main.lua所需的多个模块,那么每个文件都会成为各种对象,并且这些模块全局变量可以被视为对象的数据成员。

如果你没有在模块级别声明popUp_circle local,那么它将是一个真正的全局,“污染”全局命名空间,绝对是要避免的。

相关问题