Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当分数上升时,我如何减少设置间隔?_Javascript_Setinterval - Fatal编程技术网

Javascript 当分数上升时,我如何减少设置间隔?

Javascript 当分数上升时,我如何减少设置间隔?,javascript,setinterval,Javascript,Setinterval,我正在做一个类似俄罗斯方块的小游戏。我需要随着球员得分的上升,积木下降得更快。我目前有以下代码: setInterval(function(){ if(gameOn == 1){ gravity(); } },1000); 这将调用我的重力函数,它使块下降,并进行所有碰撞检测等 var time = 1000 - score; setInterval(function(){ if(gameOn == 1){ hideSt

我正在做一个类似俄罗斯方块的小游戏。我需要随着球员得分的上升,积木下降得更快。我目前有以下代码:

setInterval(function(){
    if(gameOn == 1){
        gravity();
    }
},1000);
这将调用我的重力函数,它使块下降,并进行所有碰撞检测等

var time = 1000 - score;

setInterval(function(){
        if(gameOn == 1){
            hideStuff('hover');
            gravity();
            time = 1000 - score;
        }
    },time);

我原以为这样可能行得通,但似乎行不通。有什么想法吗?谢谢

您可以使用超时而不是间隔,并在回调结束时将所需时间设置为新的超时。这样,您就不需要每次更改时间时都清除间隔

大概是这样的:

// Some initial time to use
var time = 1000;
// Set the first timeout
setTimeout(callback, time);

function callback(){
    if(gameOn == 1){
        hideStuff('hover');
        gravity();
        time = 1000 - score;
        // Set a new timeout with your new time
        setTimeout(callback, time);
    }
 }
无论何时更改延迟,您都需要重新启动:

window.icount = setInterval(function(){
    if(gameOn == 1){
        gravity();
    }
},1000);


var time = 1000 - score;

clearInterval(window.icount);
window.icount = setInterval(function(){
        if(gameOn == 1){
            hideStuff('hover');
            gravity();
            time = 1000 - score;
        }
    },time);

您可以执行
setTimeout
循环。这样,对
setTimeout
的每次调用都将反映对
time

var time = 1000;

(function foo(){

  if(gameOn == 1){
    hideStuff('hover');
    gravity();
    time = 1000 - score;
  }

  setTimeout(foo,time);

}());

您必须清除现有的计时器对象,并使用修改后的时间创建一个新的计时器对象。

您需要使用setTimeout而不是setInterval,如下所示:

setTimeout (function play () {
   if (gameOn == 1){
     hideStuff('hover');
     gravity();
     time = 1000 - score;
     setTimeout (play, 1000 - score);
   }
}, 1000);

这是一个答案,如果第一个代码实际工作(但不会更快),您还没有真正告诉我们发生了什么

在你的系统中,你的分数不可能等于或超过1000,因为计时器设置为零或更低。
我会慢慢地减少每次“滴答”的次数,并设置一个最小值(比如100)。

玩家将无法跟上方块下降的速度,但设置一个最小值听起来是个好主意。谢谢