定时器随机秒¿如何更新随机秒?

时间:2014-06-02 03:20:55

标签: random timer lua corona 2d-games

我有一个计时器“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

2 个答案:

答案 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.performWithDelaytransition.to的返回值。

答案 1 :(得分:0)

你的电话不正确,应该是:

tmr_sendCesta = timer.performWithDelay(math.random(1000, 3000), createCesta, 0)

另外,我不认为使用0参数调用performWithDelay将满足您的目的。我认为math.random将不会再次计算...(我跑到这里,我在调用之间有一个稳定的2078 - 2079 ms延迟)