使用jquery每隔x秒更新一次变量

时间:2014-10-14 18:41:01

标签: jquery variables timeout setinterval

我想用函数更新给定时间间隔的变量。这是我的代码:

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

        var heroVel2 = '';

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

        console.log(heroVel2);

我已尝试过使用setInterval()和Timeout()的许多不同解决方案,但不知道它为什么不起作用。 我想在console.log中更改变量。

我是一个新手,整天都被困在这里。所有帮助/反馈都非常适合!!

2 个答案:

答案 0 :(得分:3)

您正在setInterval中定义一个新变量,而不是重用heroVel2 ..

尝试:

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

这应该更新外部作用域中的heroVel2以及每2秒写入控制台。

<强>更新

好的,基于你的评论,很明显这都是在一个连续的循环中完成的,这就是你使用console.logs发送垃圾邮件的原因。

你要做的不是使用setInterval而是进行时间比较。问题是当调用setInterval时,会立即调用其中的函数。因此,当您每10毫秒执行一次setInterval时,您将每隔10毫秒获得一次console.log。

在你的游戏环之外定义一个:

timeLastUpdated = new Date()。getTime();

并在循环内部,您将检查当前时间 - timeLastUpdated&gt; = 2000 如果是,则将timeLastUpdate设置为currentTimeMillis。通过这种方式,您可以每2000毫秒获得一次动作。

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

答案 1 :(得分:0)

您提供的时间间隔是每2秒更新heroVel2的值,但没有别的。如果要记录新值,则还必须在间隔内包含日志。

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

当然,由于heroVel1没有改变,因此您将其更新到此处的值不会发生变化。为了确保您获得更新的值,您必须从game.currentHero.GetLinearVelocity().x重新获取它,如下所示:

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

而且,根据脚本的需要,这可能会使变量无效,因为您可以直接将当前速度作为参数传递给console.log