Я новичок в 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)
Любая помощь будет принята с благодарностью.
currentPuddleDelay
? Вы уверены, что он доступен в строке, где выполняетсяtimer.cancel()
? Взгляните на аналогичный вопрос: stackoverflow.com/questions/32403817/ - person Electrix   schedule 08.08.2017puddle = nil
внутриonPuddleCollision
? Это приведет к попытке индексировать ошибку нулевого значения, если один и тот же экземплярonPuddleCollision
вызывается дважды сevent.phase == "began"
оба раза. - person Tanner Swett   schedule 08.08.2017