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



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

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

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

我是一个新手,整天都被这个问题困扰着。高度重视所有帮助/反馈!!

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

尝试:

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

这应该会更新外部范围中的heroVel2,并每2秒写入控制台。

更新:

好的,所以根据你的评论,很明显,这一切都是在一个连续的循环中完成的,这就是为什么你会收到console.log的垃圾邮件。

您所要做的不是使用setInterval,而是进行时间比较。问题是,当调用setInterval时,它内部的函数会立即被调用。因此,当你每10ms执行一次setInterval时,你会每10ms得到一个console.log。

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

timeLastUpdated=新日期().getTime();

在循环中,您将检查currentTime-timeLastUpdated是否>=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

您提供的间隔是每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

相关内容

  • 没有找到相关文章

最新更新