我正在努力解决下面的代码.我尝试了很多不同的方法,但我最终得到了两个不正确的结果之一.
for(i = 0; i < result.length; i++) {
var tmpBlockInfo = {
size: worldTest.data[0].size,xStartPixel : result[i].x * worldTest.data[0].size,yStartPixel : result[i].y * worldTest.data[0].size,blockType : (Math.random() * 100 > 10) ? 'path' : 'wall'
}
var tmpFunc = function(){
worldTest.fillBlock(tmpBlockInfo,157,152,124,255)
};
var t = setTimeout(function(){
tmpFunc()
},500 * i);
}
上面代码的问题是tmpBlockInfo总是得到最后的结果[i] .x / result [i] .y.因此,当超时运行函数时,我正在假设它看到什么结果[i] .x / result [i] .y在循环之后保持开启(而不是将其作为“新”变量传递)
我认为将它放入函数会解决闭包问题,但没有运气.
还尝试过:
for(i = 0; i < result.length; i++) {
var tmpBlockInfo = {
size: worldTest.data[0].size,blockType : (Math.random() * 100 > 10) ? 'path' : 'wall'
}
var t = setTimeout(function(){
worldTest.fillBlock(tmpBlockInfo,255)
},10000 * i);
}
与第一个代码具有相同的结果.
如果我做:
for(i=0; i < result.length; i++) {
var tmpBlockInfo = {
size: worldTest.data[0].size,blockType : (Math.random() * 100 > 10) ? 'path' : 'wall'
}
setTimeout(function(passBlockInfo) {
worldTest.fillBlock(tmpBlockInfo,255)
} (tmpBlockInfo),1000 * i);
}
它确实正确处理所有fillBlock函数.但它同时完成所有这些操作(例如,它不是一次一个地触发它们.它只是在彼此之后执行它们但导致阻塞(没有屏幕更新)并且每个之间没有延迟.
任何帮助都会很棒!