【问题标题】:CORONA: timer.cancel() returns "Attempt to index a nil value"CORONA:timer.cancel() 返回“尝试索引一个零值”
【发布时间】:2015-11-30 22:51:15
【问题描述】:

我正在尝试取消在另一个“触摸事件”函数内的“触摸事件”函数中启动的计时器,如下所示:

local function startNewGame(event)
if(event.phase=="ended")then
    local function animationImmaginiOggetti()
      for i=1, 7 do
        transition.to(immaginiOggettiAvvioPartita[i],
                      { time = 200, delay = 0, xScale = 0, yScale = 0, alpha = 0})
      end
    end
    local function removeImmaginiOggetti()
        if immaginiOggettiAvvioPartita[1] then
            for i=1, 11 do
                immaginiOggettiAvvioPartita[i]:removeSelf()
                immaginiOggettiAvvioPartita[i] = nil
            end
        end
    end

    local tmrAIO = timer.performWithDelay(4000, animationImmaginiOggetti, 1)
    local tmrRIO = timer.performWithDelay(4250, removeImmaginiOggetti, 1)
end
end


local function replayGame(event)
    if(event.phase=="ended")then
        timer.cancel(tmrAIO)
        timer.cancel(tmrRIO)
    end
end

startBTN:addEventListener("touch", startNewGame)
replayBTN:addEventListener("touch", replayGame)

我的问题是 Corona 回来了

“文件:?Attempt to index a nil value" on timer.cancel (tmrAIO).

我做错了什么?

【问题讨论】:

    标签: timer lua scope null coronasdk


    【解决方案1】:

    问题如下,变量tmrAIOtmrRIO是函数startNewGame的局部变量,这意味着它们只能从startNewGame定义的范围内访问,而现在你正在尝试访问两者都来自该函数之外,并且它们未在该范围内定义,这就是 nil 值的原因。

    解决方案:

    local tmrAIO
    local tmrRIO
    
    local function startNewGame(event)
        if(event.phase=="ended")then
            local function animationImmaginiOggetti()
              for i=1, 7 do
                transition.to(immaginiOggettiAvvioPartita[i],
                              {time = 200, delay = 0, xScale = 0, yScale = 0, alpha = 0})
              end
            end
            local function removeImmaginiOggetti()
                if immaginiOggettiAvvioPartita[1] then
                    for i=1, 11 do
                        immaginiOggettiAvvioPartita[i]:removeSelf()
                        immaginiOggettiAvvioPartita[i] = nil
                    end
                end
            end
    
            tmrAIO = timer.performWithDelay(4000, animationImmaginiOggetti, 1)
            tmrRIO = timer.performWithDelay(4250, removeImmaginiOggetti, 1)
        end
    end
    
    local function replayGame(event)
        if(event.phase=="ended")then
            timer.cancel(tmrAIO)
            timer.cancel(tmrRIO)
        end
    end
    
    startBTN:addEventListener("touch", startNewGame)
    replayBTN:addEventListener("touch", replayGame)
    

    如您所见,我在startNewGame 范围之外声明了tmrAIOtmrRIO,使它们可以在此文件中的任何位置访问。

    【讨论】:

    • 你能把它标记为答案吗,很抱歉打扰你这是我第一次堆栈溢出,我正在学习它是如何工作的:)
    猜你喜欢
    • 2015-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-05-15
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 2016-09-19
    • 1970-01-01
    相关资源
    最近更新 更多