我正在使用JavaScript开发游戏,我想改变它的行为方式。我正在寻找的是一种每10秒改变一次重力方向的方法。
这是我的setInterval代码,在我的draw()函数中调用,在游戏运行时运行:
setInterval(function(){
changeGravity();
},10000);
以下是名为的代码:
function changeGravity(){
var rnd = Math.floor((Math.random() * 4) + 1);
var dir = direction[rnd];
gravity.direction = dir;
}
跑步时,间隔在执行前持续10秒,但一旦执行,它就不会停止。我正在寻找的是它每10秒只执行一次。
感谢您的帮助! :)
答案 0 :(得分:1)
您不会显示draw()
函数的代码,但逻辑应该规定这是您需要多次调用的方法。
setInterval()
将一直运行,直到使用clearInterval为止。它将运行一个新的"实例"每次调用它时每次调用draw()
时都会添加一个新的计时器。
您要么在setInterval()
方法之外移动draw()
的调用,并确保在需要时只调用一次(请记住为其存储计时器ID,以便以后可以停止它) )。
var timerID = setInterval(changeGravity, 10000);
当你想要阻止它时:
clearInterval(timerID);
或者你会想要使用setTimeout()
而不是在超时后触发目标代码一次。但是,这不会被称为每 10秒,但仅在调用draw()
时。
答案 1 :(得分:0)
你应该关心外面changeGravity
的副作用和其他电话。正如它所说,你当前的实现将每10秒执行一次。您应该关注所有变量的范围。作为优化,您无需将changeGravity
包装到另一个函数中。你可以传递它的参考,考虑到它是一流的功能:
setInterval(changeGravity, 1000);
答案 2 :(得分:0)
我最近处理了这个重复设置的间隔呼叫。
如果要在整个运行期间仅运行一次,请执行以下操作。
创建一个全局变量:
MyInterval = null;
然后,无论您想第一次还是唯一一次开始进行重力检查,请执行以下操作:
if (MyInterval == null)
{
MyInterval = setInterval(function() {
changeGravity();
}, 10000);
}
因此,最初间隔变量将为null
,然后将被分配,然后间隔代码将不再运行,因为该变量不再为null
。