0
我对Lua相当陌生,在我的代码中一个特定的命令一直在导致我一些主要问题。Lua:timer.cancel - >'试图索引一个零值'
我一直在试图取消计时器:
currentPuddleDelay = timer.performWithDelay(puddleDelay, createPuddle);
,我显示的错误是:
Attempt to index a nil value
File: ?
stack traceback:
?: in function 'cancel'
game.lua:534: in function '?'
?: in function 'dispatchEvent'
?: in function '_saveSceneAndHide'
?: in function 'gotoScene'
game.lua:452: in function '?'
?: in function <?:182>
从我已经研究过,可能会出现这个问题时,计时器是在一个函数内,是本地的,但是,我的代码中的计时器是全局的,所以我不认为这是问题所在。
下面的代码问题的位:
local function createPuddle()
local function constantDelay()
local puddle = display.newImage(sceneGroup, "images/puddle.png")
puddle.x = puddleLane
puddle.y = -200
physics.addBody(puddle, "dynamic", {density=0, filter=puddleCollisionFilter})
puddle:applyForce(0, puddleSpeed, puddle.x, puddle.y)
sceneGroup:insert(3,puddle)
local function onPuddleCollision(self, event)
if (event.phase == "began") then
print('puddle collision')
puddle:removeSelf()
puddle = nil
composer.gotoScene("menu")
end
end
puddle.collision = onPuddleCollision
puddle:addEventListener("collision")
end
local constantDelayTimer = timer.performWithDelay(puddleDelay/2,constantDelay,1)
currentPuddleDelayHold = timer.performWithDelay(puddleDelay, createPuddle);
end
currentPuddleDelay = timer.performWithDelay(puddleDelay, createPuddle);
在节目
再后来就:
timer.cancel(currentPuddleDelay)
任何帮助将不胜感激。
你是否检查过'currentPuddleDelay'的内容?你确定它可以在执行'timer.cancel()'的行上访问吗?看看类似的问题:https://stackoverflow.com/questions/32403817/corona-timer-cancel-returns-attempt-to-index-a-nil-value – Electrix
你为什么设置'puddle = nil'里面' onPuddleCollision'?如果两次调用'onPuddleCollision'的同一个实例并且两次调用'event.phase ==',那么这将产生一个“尝试索引nil值”的错误。 –