Lua : timer.cancel --> '尝试对一个nil值进行索引'

我对Lua还是比较新手,我的代码中特定的一个命令一直给我带来一些问题。

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

currentPuddleDelay = timer.performWithDelay(puddleDelay, createPuddle);

我收到的错误信息是:

尝试对一个nil值进行索引

文件: ?

堆栈轨迹:
?: 在函数'cancel'
game.lua:534: 在函数 '?'
?: 在函数'dispatchEvent'
?: 在函数'_saveSceneAndHide'
?: 在函数'gotoScene'
game.lua:452: 在函数 '?'
?: 在函数<: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)

任何帮助将不胜感激。

点赞
用户2858170
用户2858170

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

显然,取消一个不存在的计时器是没有意义的,所以首先要做的是

if currentPuddleDelay then timer.cancel(currentPuddleDelay) end

如果 currentPuddleDelay 仍然存在的原因,请找出它为什么是 nil。

2017-08-08 16:03:50