【问题标题】:Variable delay time in timer.performWithDelaytimer.perform with Delay 中的可变延迟时间
【发布时间】:2015-02-10 02:32:38
【问题描述】:

我需要在 Corona SDK 中调用具有可变延迟的函数。我正在尝试创建一个函数,该函数将执行一段代码,检查 timer.performWithDelay 函数是否应该继续循环,如果条件合适则将其切断。但是,该代码无关紧要。我只需要一个延迟函数调用循环,其延迟时间可能会有所不同。现在,我正在使用以下代码:

time = 500

local function foo( time )
    print( time )
end

timer.performWithDelay( time, function() 
                                time = time + 100
                                foo( time )
                              end, 10 )

显然,这是行不通的。我认为在幕后发生的事情是 timer.performWithDelay 只查看一次变量 time 并在其存在的其余部分使用它。有没有人有任何技术可以在这种情况下允许可变时间延迟?

编辑:应用程序描述:我在骨骼动画模块中使用此功能。当我播放一系列帧时,我需要能够随心所欲地暂停、恢复或取消剪辑,所以我需要一个延迟函数调用循环,每个循环都使用一组 transition.to 调用设置当前帧. 这意味着循环必须能够被暂停、恢复和取消,这就是为什么我想在使用剪辑中的帧数作为循环数时使用 timer.performWithDelay 的原因。我在下面列出了一个伪代码。

伪代码:

local flag = false

function loop( clip, object )
    for i = 1, number_frames_in_clip do
        timer.performWithDelay( duration_of_last_frame + time_elapsed, animate_object() )
        if flag == true then
            pause_loop()    <-- The real issue lies in pausing the loop
        end
    end
end

function pause( object )
    for i = 1, number_in_object.transitionTable do
        transition.pause( object.transitionTable[i] )
    end
    flag = true
end

【问题讨论】:

    标签: timer lua coronasdk


    【解决方案1】:

    你不能用一个计时器来做,但你可以这样做

    local time = 500
    local iterations = 1;
    local currentTimer = nil;
    
    local function PrintTime()
          time = time + 100
          iterations = iterations + 1
    
          print(time);
          if (iterations <= 10) then
               currentTimer = timer.performWithDelay(time, PrintTime);
          end
    end
    
    currentTimer = timer.performWithDelay(time, PrintTime);
    

    以及每当您想暂停通话时

    if (currentTimer) then
        timer.pause(currentTimer);
    end
    

    编辑:代码

    【讨论】:

    • 此代码只执行一次函数 PrintTime()。我正在寻找可以循环指定次数的东西。我已经用我的应用程序的具体描述更新了我的问题,以帮助您了解我来自哪里。
    • iBad,感谢您的帮助。我已经让我的代码与输入帧运行时侦听器和匿名函数一起工作。不过,我会给你一个赞成票并接受帮助。
    猜你喜欢
    • 2014-03-05
    • 2021-07-01
    • 2011-03-29
    • 1970-01-01
    • 1970-01-01
    • 2019-06-01
    • 2011-02-17
    • 1970-01-01
    • 2021-11-03
    相关资源
    最近更新 更多