Lua : timer.cancel --> 'Attempt to index a nil value'



我对Lua相当陌生,我的代码中的一个特定命令给我带来了一些重大问题。

我一直在尝试取消计时器:

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)

任何帮助将不胜感激。

我只能猜测,因为您很可能没有提供所有相关代码。

取消不存在的计时器显然没有意义,所以一开始就这样做

if currentPuddleDelay then timer.cancel(currentPuddleDelay) end

如果有任何理由为什么当前PuddleDelay仍然存在,你应该找出为什么它是零。

相关内容

最新更新