2015-02-10 2 views
0

Мне нужно вызвать функцию с переменной задержкой в ​​Corona SDK. Я пытаюсь создать функцию, которая будет выполнять кусок кода, который проверяет, должна ли функция timer.performWithDelay продолжать цикл, и отключает ее, если условия правильные. Однако этот код не уместен. Мне просто нужно иметь цикл отложенных вызовов функций, время задержки которых может варьироваться. В настоящий момент я использую следующий код:Время переменной задержки в timer.performWithDelay

time = 500 

local function foo(time) 
    print(time) 
end 

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

Очевидно, что это не работает. То, что я думаю, происходит за кулисами, - timer.performWithDelay только разглядывает переменное время один раз и использует это для остальной части своего существования. Есть ли у кого-нибудь какие-либо методы, которые допускают переменную временную задержку в такой ситуации?

EDIT: ОПИСАНИЕ ПРИМЕНЕНИЯ: Я использую эту функцию в модуле скелетных анимаций. Когда я воспроизвожу последовательность кадров, мне нужно иметь возможность приостанавливать, возобновлять или отменять клип по своему усмотрению, поэтому мне нужен цикл отложенных вызовов функций, каждый из которых устанавливает текущий кадр с набором переходов. , Это означает, что цикл должен быть в состоянии приостановить, возобновить и отменить также,, поэтому я решил использовать 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 

ответ

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 

EDIT: код

+0

Этот код только execu tes функция PrintTime() один раз. Я ищу что-то, что будет цикл в течение определенного количества раз. Я обновил свой вопрос с конкретным описанием моего приложения в случае, если вы поможете понять, откуда я. – user3014065

+0

Я отредактировал код, посмотри. – iBad

+0

iBad, спасибо за помощь. Я получил свой код для работы с прослушивателем времени выполнения и анонимной функцией. Я дам вам выкуп и соглашусь на помощь. – user3014065

Смежные вопросы