Canceling a timer without a variable name

I am having trouble figuring out a way to cancel a specific timer if it does not have a variable name, I cannot add  a variable name because it would mess up some other code I have, if any code is needed please ask.

Thank you.

Sincerely,

Alex

You can cancel the timer with the event object (event.source) in the timer’s listener function. Code example in the docs:

https://docs.coronalabs.com/daily/api/library/timer/cancel.html

I am having trouble implementing this into my code, this is my code:

function spawnEnemies() temp = math.random(1, 4) if temp == 1 then enemy = display.newSprite(beetle, beetleSequenceData) enemy.x = \_R + 100 enemy.y = \_CY enemy.hasBeenScored = false physics.addBody(enemy, "dynamic", physicsData:get("beetle")) enemy.xScale = -1 enemy.id = "enemy" enemy.isFixedRotation = true enemy:play() group:insert(enemy) elseif temp == 2 then enemy2 = display.newSprite(vulture, vultureSequenceData) enemy2.x = \_R + 100 enemy2.y = \_CY - (enemy2.height \* 0.25) enemy2.hasBeenScored = false physics.addBody(enemy2, "dynamic", physicsData:get("vulture")) enemy2.xScale = -1 enemy2.gravityScale = -0.01 enemy2.id = "enemy2" enemy2.isFixedRotation = true enemy2:play() specialGroup:insert(enemy2) elseif temp == 3 then enemy3 = display.newSprite(scorpion, scorpionSequenceData) enemy3.x = \_R + 100 enemy3.y = \_CY enemy3.hasBeenScored = false physics.addBody(enemy3, "dynamic", physicsData:get("scorpion")) enemy3.xScale = -1 enemy3.id = "enemy3" enemy3.isFixedRotation = true enemy3:play() group:insert(enemy3) else enemy4 = display.newSprite(bee, beeSequenceData) enemy4.x = \_R + 100 enemy4.y = \_CY - (enemy4.height \* 0.25) enemy4.hasBeenScored = false physics.addBody(enemy4, "dynamic", physicsData:get("bee")) enemy4.xScale = -1 enemy4.gravityScale = -0.01 enemy4.id = "enemy4" enemy4.isFixedRotation = true enemy4:play() specialGroup:insert(enemy4) end timer.performWithDelay( math.random(2000, 4000), spawnEnemies ) end
elseif ( phase == "did" ) then -- Code here runs when the scene is entirely on screen physics.start() horizon.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", horizon) horizon2.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", horizon2) mountainback.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", mountainback) mountainback2.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", mountainback2) mountain.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", mountain) mountain2.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", mountain2) trees.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", trees) trees2.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", trees2) character:play() Runtime:addEventListener("enterFrame", getVelocities) Runtime:addEventListener("touch", touchScreen) Runtime:addEventListener("collision", onCollision) Runtime:addEventListener("enterFrame", highScore) timer.performWithDelay(math.random(2000, 4000), spawnEnemies) moveEnemiesTimer = timer.performWithDelay(2, moveEnemies, -1) end end

I use two timers for a random delay effect that I need.

The phase == “did” is in the show scene.

It is essential to create a variable for timer as it proves to be effective while removing timers(so that there is no lagging)

assign a variable to the timer and remove it wherever you want it to

Thank you all very much, I just needed to assign to different variables to each timer.

You can cancel the timer with the event object (event.source) in the timer’s listener function. Code example in the docs:

https://docs.coronalabs.com/daily/api/library/timer/cancel.html

I am having trouble implementing this into my code, this is my code:

function spawnEnemies() temp = math.random(1, 4) if temp == 1 then enemy = display.newSprite(beetle, beetleSequenceData) enemy.x = \_R + 100 enemy.y = \_CY enemy.hasBeenScored = false physics.addBody(enemy, "dynamic", physicsData:get("beetle")) enemy.xScale = -1 enemy.id = "enemy" enemy.isFixedRotation = true enemy:play() group:insert(enemy) elseif temp == 2 then enemy2 = display.newSprite(vulture, vultureSequenceData) enemy2.x = \_R + 100 enemy2.y = \_CY - (enemy2.height \* 0.25) enemy2.hasBeenScored = false physics.addBody(enemy2, "dynamic", physicsData:get("vulture")) enemy2.xScale = -1 enemy2.gravityScale = -0.01 enemy2.id = "enemy2" enemy2.isFixedRotation = true enemy2:play() specialGroup:insert(enemy2) elseif temp == 3 then enemy3 = display.newSprite(scorpion, scorpionSequenceData) enemy3.x = \_R + 100 enemy3.y = \_CY enemy3.hasBeenScored = false physics.addBody(enemy3, "dynamic", physicsData:get("scorpion")) enemy3.xScale = -1 enemy3.id = "enemy3" enemy3.isFixedRotation = true enemy3:play() group:insert(enemy3) else enemy4 = display.newSprite(bee, beeSequenceData) enemy4.x = \_R + 100 enemy4.y = \_CY - (enemy4.height \* 0.25) enemy4.hasBeenScored = false physics.addBody(enemy4, "dynamic", physicsData:get("bee")) enemy4.xScale = -1 enemy4.gravityScale = -0.01 enemy4.id = "enemy4" enemy4.isFixedRotation = true enemy4:play() specialGroup:insert(enemy4) end timer.performWithDelay( math.random(2000, 4000), spawnEnemies ) end
elseif ( phase == "did" ) then -- Code here runs when the scene is entirely on screen physics.start() horizon.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", horizon) horizon2.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", horizon2) mountainback.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", mountainback) mountainback2.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", mountainback2) mountain.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", mountain) mountain2.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", mountain2) trees.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", trees) trees2.enterFrame = scrollMountains Runtime:addEventListener("enterFrame", trees2) character:play() Runtime:addEventListener("enterFrame", getVelocities) Runtime:addEventListener("touch", touchScreen) Runtime:addEventListener("collision", onCollision) Runtime:addEventListener("enterFrame", highScore) timer.performWithDelay(math.random(2000, 4000), spawnEnemies) moveEnemiesTimer = timer.performWithDelay(2, moveEnemies, -1) end end

I use two timers for a random delay effect that I need.

The phase == “did” is in the show scene.

It is essential to create a variable for timer as it proves to be effective while removing timers(so that there is no lagging)

assign a variable to the timer and remove it wherever you want it to

Thank you all very much, I just needed to assign to different variables to each timer.