2014-04-26 2 views
-1

У меня есть функция и вы хотите вызвать ее каждые 2 секунды в течение 3 секунд.Как запустить функцию в течение ограниченного времени?

Я пробовал timer.performwithDelay(), но он не отвечает на мой вопрос.

Вот функция, я хочу назвать каждый 2 secondes в течение 3 секунд:

function FuelManage(event) 
    if lives > 0 and pressed==true then   

     lifeBar[lives].isVisible=false 
     lives = lives - 1 
--  print(lifeBar[lives].x) 
     livesValue.text = string.format("%d", lives) 


    end 
end 

Как я могу использовать timer.performwithDelay(2000, callback, 1) называть мою функцию FuelManage(event)?

+0

каждые 2 секунды в течение 3 секунд? то есть один вызов задерживается на 2 секунды с момента правильного вызова? 'timer.performwithDelay (2000, callback, 1)' сделает это за вас. –

+1

Я бы с удовольствием помог, но «каждые 2 секунды в течение 3 секунд» не имеет смысла. Первый вызов будет через две секунды после 'performWithDelay', и следующий вызов будет еще через 2 секунды после этого, так что в общей сложности 4 секунды с самого первого вызова выполнить функциюWithDelay, и это не попадает в« в течение 3 секунд ». Просьба уточнить. – Schollii

ответ

1

Таким образом, похоже, что вы на самом деле после этого должны начать несколько проверок на 2 секунды с «сейчас» в течение 3 секунд. Вы можете запланировать регистрацию и регистрацию для событий enterFrame. Используя это будет вызывать вашу функцию FuelManage каждый шаг по времени в период интереса:

function cancelCheckFuel(event) 
     Runtime:removeListener('enterFrame', FuelManager) 
    end 

    function FuelManage(event) 
     if lives > 0 and pressed==true then   
      lifeBar[lives].isVisible=false 
      lives = lives - 1 
      -- print(lifeBar[lives].x) 
      livesValue.text = string.format("%d", lives)  
     end 
    end 

    -- fuel management: 
    local startFuelCheckMS = 2000 -- start checking for fuel in 2 seconds 
    local fuelCheckDurationMS = 3000 -- check for 3 seconds 
    local stopFuelCheckMS = startFuelCheckMS + fuelCheckDurationMS 
    timer.performWithDelay(
     startFuelCheckMS, 
     function() Runtime:addEventListener('enterFrame', FuelManager) end, 
     1) 
    timer.performWithDelay(
     stopFuelCheckMS, 
     function() Runtime:removeEventListener('enterFrame', FuelManager) end, 
     1) 

Если это слишком высокая частота, то вы хотите использовать таймер, и следить за временем:

local fuelCheckDurationMS = 3000 -- check for 3 seconds 
    local timeBetweenChecksMS = 200 -- check every 200 ms 
    local totalCheckTimeMS = 0 
    local startedChecking = false 

    function FuelManage(event) 
     if lives > 0 and pressed==true then   
      lifeBar[lives].isVisible=false 
      lives = lives - 1 
      -- print(lifeBar[lives].x) 
      livesValue.text = string.format("%d", lives)  
     end 

     if totalCheckTimeMS < 3000 then 
      timer.performWithDelay(timeBetweenChecksMS, FuelManage, 1) 
      if startedChecking then 
       totalCheckTimeMS = totalCheckTimeMS + timeBetweenChecksMS 
      end 
      startedChecking = true 
     end 
    end 

    -- fuel management: 
    local startFuelCheckMS = 2000 -- start checking for fuel in 2 seconds 
    timer.performWithDelay(startFuelCheckMS, FuelManage, 1) 
+0

Благодарим вас за помощь. Я вставил код, но он говорит: Попытка вызвать поле 'performwithDelay' (значение nil) (в соответствии с таймером.performwithDelay (3000, FuelManage, 1)) –

+0

@MehmetAitAddi Прошу показать некоторые усилия, когда вы пытаетесь ответить на вопросы, только если потратил целый час, пытаясь понять это, тогда вы добавили такой комментарий. Потому что вам следовало бы подумать, что один из них сам по себе (если вы не можете тогда заниматься слишком продвинутым): проблема в том, что я ошибся, это должно быть «performWithDelay». Я обновил свой ответ. Кроме того, вы пытаетесь решить 3 или 4 моего ответа? – Schollii

+0

О, боже, мне очень жаль :-(Я попробовал answser 4. Я добавил «управление топливом» в functon под названием «Checkfuel» и добавил слушателя. Я отредактировал свой вопрос. –

0

Установка таймера внутри таймера, как это:

function FuelManage(event) 
    if lives > 0 and pressed==true then   
     lifeBar[lives].isVisible=false 
     lives = lives - 1 
--  print(lifeBar[lives].x) 
     livesValue.text = string.format("%d", lives)  
    end 
end 

-- Main timer, called every 2 seconds 
timer.performwithDelay(2000, function() 
    -- Sub-timer, called every second for 3 seconds 
    timer.performwithDelay(1000, FuelManage, 3) 
end, 1) 

Будьте осторожны, потому что способ это установка знаю, вы будете иметь бесконечное количество таймера работает очень скоро ... Так как первый таймер имеет более низкий чем второй. Таким образом, вы можете подумать, хотите ли вы защитить второй таймер, убедившись, что он отменен первым, прежде чем называть его снова, такого рода вещи.

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