2014-10-14 2 views
0

Я хочу обновить переменную на заданный интервал времени с помощью функции. Вот мой код:Обновление переменной каждые x секунд с помощью jquery

 var heroVel1 = game.currentHero.GetLinearVelocity().x; 

     var heroVel2 = ''; 

     setInterval(function() { 
      var heroVel2 = heroVel1; 
     }, 2000); 

     console.log(heroVel2); 

Я пробовал много различных решений с setInterval() и Timeout(), но не знаю, почему он не работает. Я хочу console.log измененную переменную.

Я новичок и застрял с этим целый день. Вся помощь/обратная связь очень приветствуется!

+0

Поместите консоль в функцию. Теперь переменная записывается в консоль, и значение изменяется через две секунды. – Barry

ответ

3

вы определяете новую переменную внутри setInterval вместо использования heroVel2 ..

попробовать:

setInterval(function() { 
     heroVel2 = heroVel1; 
     console.log(heroVel2); 
    }, 2000); 

Это должно обновить heroVel2 во внешнем объеме как хорошо, как пишут на консоли каждые 2 секунды ,

UPDATE:

ИТАК на основе ваших комментариев стало ясно, что все это делается в непрерывном цикле, поэтому вы получаете спам с console.logs.

Что вы будете делать, это НЕ использовать setInterval и вместо этого проводить сравнение времени. Проблема заключается в том, что при вызове setInterval функция внутри него немедленно вызывается. Поэтому, когда вы выполняете setInterval каждые 10 мс, вы получите console.log каждые 10 мс.

вне вас gameloop определить:

timeLastUpdated = новый Дата() GetTime();.

и в цикле вы проверили, будет ли currentTime - timeLastUpdated> = 2000 , если это так, то вы установите timeLastUpdate на currentTimeMillis. Таким образом, вы получите действие, которое должно произойти каждые 2000 miliseconds.

timeLastUpdated = new Date().getTime(); // Gets the time in millis 


function gameLoop() {  
var currentTimeMillis = new Date().getTime(); // For each trip through this loop, set currentTimeMillis to the currentTime. 


if(currentTimeMillis - timeLastUpdated >= 2000) { // has it been more than 2000milis since last? 

heroVel2 = heroVel1; 
console.log(heroVel2); 

    timeLastUpdated = currentTimeMillis; 

} 

FIDDLE

+0

Я попытался сделать то, что вы предложили, а также включить console.log в функцию, как предложил @Barry. Результатом является длинная строка значений от heroVel1. Я просто хочу обновленную переменную heroVel2 каждые 2 секунды в console.log. Имеет ли это смысл? –

+0

и положить консоли.войти (heroVel2); внутри функции setInterval этого не происходит? –

+0

Это не дает мне обновленную переменную каждые 2 секунды, как я хочу. Просто длинный список значений из 'game.currentHero.GetLinearVelocity(). X;'. Но я хочу всего лишь одну секунду каждые 2 секунды. –

0

Промежуток вы предоставили обновляет значение heroVel2 каждые 2 секунды, но больше ничего. Если вы хотите, чтобы новое значение регистрировалось, вы также должны включить журнал в течение интервала.

setInterval(function() { 
    heroVel2 = heroVel1; 
    console.log(heroVel2); 
}, 2000); 

Конечно, значение, которое вы обновляете его здесь не меняется, так как heroVel1 не изменилась. Для того, чтобы убедиться, что вы получите обновленное значение, вы должны refetch его от game.currentHero.GetLinearVelocity().x так:

setInterval(function() { 
    heroVel2 = game.currentHero.GetLinearVelocity().x; 
    console.log(heroVel2); 
}, 2000); 

И, в зависимости от потребностей вашего сценария, это может сделать переменные бесполезно, как вы могли бы просто передать ток скорость в качестве аргумента для console.log напрямую.

+0

На самом деле я хочу посмотреть, будет ли «heroVel1 = game.currentHero.GetLinearVelocity(). X;« меняться со временем »и выполнять другую функцию, если значение изменилось. –

+0

Это было бы не так просто, как «heroVel2 = game.currentHero.GetLinearVelocity(). X;' 'if (heroVel1! = HeroVel2) console.log ('heroVel изменился!');'? –

+0

Почти. У меня есть вход из 'game.currentHero.GetLinearVelocity(). X;' если это значение будет одинаковым через 3 секунды, я хочу выполнить новую функцию. –

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