我有一个计时器“tmr_sendCesta
”,必须在1到3秒之间每x秒调用一次。问题是计时器“tmr_sendCesta
”只被调用一次,随机秒数永远不会更新。我需要随机每隔x秒调用一次函数“createCesta
”。
知道该怎么做吗?
function createCesta()
cesta = display.newImageRect("cesta.png", 100, 55)
cesta.x = -110
cesta.y = screenH - 110
cesta.name = "cesta"
physics.addBody( cesta, physicsData:get("cestaSmall"))
grupoCesta:insert(cesta)
transition.to(cesta, {time = 4000, x = screenW + 110})
end
function scene:enterScene( event )
local group = self.view
physics.start()
Runtime:addEventListener("touch", touchScreen)
Runtime:addEventListener( "collision", onCollision )
tmr_sendCesta = timer.performWithDelay(math.random(1000, 3000), createCesta, 0)
end
答案 0 :(得分:1)
如果您想以随机间隔调用createCesta
(或randomCesta
,不确定这是否是错字或您没有显示正确的函数),则必须重新评估math.random每次。因此,您不能使用循环计时器,因为每次延迟都是相同的。您必须重新安排计算新随机数的新计时器并创建一个新计时器:
local function randomDelay() return math.random(1000, 3000) end
local function randomCesta()
cesta = display.newImageRect("cesta.png", 100, 55)
...
grupoCesta:insert(cesta)
transition.to(cesta, {time = 4000, x = screenW + 110})
# reschedule at new random time:
timer.performWithDelay(randomDelay(), randomCesta)
end
function scene:enterScene( event )
...
timer.performWithDelay(randomDelay(), randomCesta)
end
如果您要取消/恢复/暂停计时器或过渡,您可能只需要timer.performWithDelay
和transition.to
的返回值。
答案 1 :(得分:0)
你的电话不正确,应该是:
tmr_sendCesta = timer.performWithDelay(math.random(1000, 3000), createCesta, 0)
另外,我不认为使用0参数调用performWithDelay将满足您的目的。我认为math.random将不会再次计算...(我跑到这里,我在调用之间有一个稳定的2078 - 2079 ms延迟)