我想用一个函数在给定的时间间隔内更新一个变量。这是我的代码:
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
。