我有一个类似的循环:
var running_time = 0;
var start_time = new Date();
while( cars.length > 0 )
{
this.update(null, running_time)
for(var i in cars )
{
var car = cars[i];
car.delay = 0;
car.update(start_time, this)
}
for( var i in cars_to_remove )
{
var index = cars.indexOf(cars_to_remove[i]);
if( index > -1 )
{
cars.splice(index, 1);
}
}
cars_to_remove.splice(0, cars_to_remove.length);
running_time++;
}
var end_time = new Date();
我在这里做的是,我正在模拟汽车运动和交通信号灯的动画。循环运行直到所有汽车到达目的地。当汽车到达目的地时标记为从汽车阵列中移除(参见第二循环)。
当我在while循环中使用断点调试此while循环时,running_time变量通常在90左右,但是当我在while循环中没有断点,并在上面的示例中的最后一行设置断点时,running_time变量的值更多(约12000)。
捕获的地方在哪里?
答案 0 :(得分:0)
您没有将完成的汽车推到cars_to_remove
阵列。 (或者它只是从显示的代码中丢失了?)
您是否在更新动画的函数中使用setTimeout
/ setInterval
?
如果在更新汽车位置时涉及超时,则在调试和等待断点时进行的迭代将少于正常执行。
通常必须通过以下任一方式完成此操作。
Method1 (伪代码)
while(condition){
calculatePosition();
updatePosition();
}
function updatePosition(){
if(condition){
marktoRemove();
}else{
setTimeout(function(){
updateDisplay();
}, delay);
delay += 100; // for e.g.
}
}
Method2 (伪代码) - No While循环
setTimeout(function(){
calculatePosition();
if(condition){
marktoRemove();
}else{
updateDisplay();
}
}, delay);
建议使用第二种方法。