我想用函数更新给定时间间隔的变量。这是我的代码:
var heroVel1 = game.currentHero.GetLinearVelocity().x;
var heroVel2 = '';
setInterval(function() {
var heroVel2 = heroVel1;
}, 2000);
console.log(heroVel2);
我已尝试过使用setInterval()和Timeout()的许多不同解决方案,但不知道它为什么不起作用。 我想在console.log中更改变量。
我是一个新手,整天都被困在这里。所有帮助/反馈都非常适合!!
答案 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;
}
答案 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
。