Я борюсь с кодом ниже. Я пробовал много разных способов сделать это, но в результате я получил один из двух неверных результатов.
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,
xStartPixel : result[i].x * worldTest.data[0].size,
yStartPixel : result[i].y * worldTest.data[0].size,
blockType : (Math.random() * 100 > 10) ? 'path' : 'wall'
}
var t = setTimeout(function(){
worldTest.fillBlock(tmpBlockInfo, 157, 152, 124, 255)
} , 10000 * i);
}
С теми же результатами, что и первый код.
Если я это сделаю:
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'
}
setTimeout(function(passBlockInfo) {
worldTest.fillBlock(tmpBlockInfo, 157, 152, 124, 255)
} (tmpBlockInfo), 1000 * i);
}
Он правильно обрабатывает все функции fillBlock. НО он делает их все одновременно (например, он не запускает их по одному за раз. Он просто делает их друг за другом, но вызывает блокировку (без обновления экрана) и никакой задержки между ними.
Любая помощь с этим была бы великолепна!