Ich bin ziemlich neu zu Lua, und ein bestimmter Befehl in meinem Code hat mir einige große Probleme verursacht.Lua: timer.cancel -> 'Versuch, einen Nullwert zu indexieren'
Ich habe versucht, den Timer abzubrechen:
currentPuddleDelay = timer.performWithDelay(puddleDelay, createPuddle);
Der Fehler, der mir gezeigt ist:
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>
Von dem, was ich bereits erforscht haben, kann dieses Problem auftreten, wenn die Timer ist innerhalb einer Funktion und ist lokal, aber der Timer in meinem Code ist global, also glaube ich nicht, dass das das Problem ist.
unten ist das Stück Code, mit dem Thema:
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);
Und dann später im Programm:
timer.cancel(currentPuddleDelay)
Jede Hilfe wäre sehr dankbar.
Haben Sie den Inhalt von 'currentPuddleDelay' überprüft? Sind Sie sicher, dass es in der Zeile, in der 'timer.cancel()' ausgeführt wird, erreichbar ist? Sehen Sie sich ähnliche Fragen an: https://stackoverflow.com/questions/32403817/corona-timer-cancel-returns-attempt-to-index-a-nil-value – Electrix
Warum setzen Sie 'puddle = nil' inside' onPuddleCollision'? Dies führt zu einem Fehler "Versuch, einen Nullwert zu indexieren", wenn dieselbe Instanz von 'onPuddleCollision' zweimal mit 'event.phase ==" started "aufgerufen wird. –