设置可变间隔速度

问题描述:

var dropSpeed = 3750; 
var spawnSpeed = 2000; 
var i = 0; 

function makeSymbol(sym) 
{ 
    setInterval(function(){ 
     if(dropSpeed > 1500){dropSpeed = dropSpeed - 350;}if(spawnSpeed > 50){spawnSpeed =  spawnSpeed - 231;} 
     var aSymbol = sym.createChildSymbol("aSymbol" ,"stage"); 
     i = i + 1; 
     symbols[i] = aSymbol.getSymbolElement(); 
     symbols[i].animate({top: "950px"},dropSpeed);  //uses the changed dropspeed 
    },spawnSpeed);   //does not use the change spawnSpeed but keeps using the 2000 
} 

spawnSpeed不会改变,但dropSpeed会改变。我怎么能让spawnspeed改变?我希望这不是一个愚蠢的问题,但我在这里呆了很久。你们是我唯一的希望。 :)设置可变间隔速度

+0

,如果你把这个外面的setTimeout()和前 把它如果(spawnSpeed> 50){spawnSpeed = spawnSpeed - 231;} – vodich 2014-12-07 13:35:10

+0

刚才看到您使用的setInterval();无视以前的评论 – vodich 2014-12-07 13:40:47

您正试图动态更改时间间隔。 setInterval适用于静态时间间隔。相反setTimeout函数可以用于此。

尝试类似这样的东西。

var dropSpeed = 3750; 
var spawnSpeed = 2000; 
var i = 0; 

function makeSymbol(sym) 
{ 
    setTimeout(function(){ 
     if(dropSpeed > 1500){dropSpeed = dropSpeed - 350;}if(spawnSpeed > 50){spawnSpeed =  spawnSpeed - 231;} 
     var aSymbol = sym.createChildSymbol("aSymbol" ,"stage"); 
     i = i + 1; 
     symbols[i] = aSymbol.getSymbolElement(); 
     symbols[i].animate({top: "950px"},dropSpeed);  //uses the changed dropspeed 
     makeSymbol(sym); 
    },spawnSpeed);   //does not use the change spawnSpeed but keeps using the 2000 
} 
+0

谢谢!我的思想被困在setInterval上。 – user3656836 2014-12-07 13:56:04

您应该使用setTimeout或清除间隔并尝试再次运行它。 setInterval注册一个具有特定id和时间间隔的时间间隔。这是第一次,也是2秒钟的时间。我宁愿使用setTimeout来解决这个问题。这是一个庞然大物,你可以看到代码和结果。 Plunk here

function makeSymbol(sym) 
{ 
    var test = function (){ 
     if(dropSpeed > 1500){dropSpeed = dropSpeed - 350;} 
     if(spawnSpeed > 50){spawnSpeed =  spawnSpeed - 231;} 
     if(spawnSpeed <= 4) spawnSpeed = 2000; 

     $("#speed").text((new Date())); 
     setTimeout(test, spawnSpeed); 
    } 
    setTimeout(test,spawnSpeed); 
}