日冕:timer.cancel() returns "Attempt to index a nil value"
CORONA: timer.cancel() returns "Attempt to index a nil value"
我正在尝试取消在另一个 "touch event" 函数内的 "touch event" 函数中启动的计时器,如下所示:
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 returns
"File: ? Attempt to index a nil value" on timer.cancel (tmrAIO)
.
我做错了什么?
问题如下,变量tmrAIO
和tmrRIO
是函数startNewGame
的局部变量,这意味着它们只能从[=13定义的范围内访问=] 现在您正试图从该函数外部访问这两个函数,并且它们未在该范围内定义,这就是 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)
如您所见,我将 tmrAIO
和 tmrRIO
声明在 startNewGame
的范围之外,使它们可以在此文件中的任何位置访问。
我正在尝试取消在另一个 "touch event" 函数内的 "touch event" 函数中启动的计时器,如下所示:
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 returns
"File: ?
Attempt to index a nil value" on timer.cancel (tmrAIO)
.
我做错了什么?
问题如下,变量tmrAIO
和tmrRIO
是函数startNewGame
的局部变量,这意味着它们只能从[=13定义的范围内访问=] 现在您正试图从该函数外部访问这两个函数,并且它们未在该范围内定义,这就是 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)
如您所见,我将 tmrAIO
和 tmrRIO
声明在 startNewGame
的范围之外,使它们可以在此文件中的任何位置访问。