我trting做以下內HTML5畫布:如何呈現環
我通過一個運行循環,每次我得到一個新的信息,並希望把它畫在畫布上。 問題在於畫布剛剛在循環完成後繪製,而我看不到任何動畫。 如果我介入調試或警報消息,它將立即畫到畫布上。我該怎麼做?
這是我的代碼,你可以看到我已經用多種方式嘗試setTimeout,但沒有奏效。
for(var i=0;i<1000; i ++)
{
addLines(ga.getBestCreature()); // This method draw on the canvas
setTimeout(function() {
ga.startEvolution(1); // This method change the best creature
}, 10);
}
的drowing方法:
function addLines(best) {
if(!best) {
return;
}
var global_path = best.data;
redraw(); // Clear off the canvas
var cityA;
var cityB;
for (var i = 0; i < (global_path.length - 1); i++) {
cityA = ga.cities[global_path[i]];
cityB = ga.cities[global_path[i+1]];
ctx.moveTo(cityA.x,cityA.y);
ctx.lineTo(cityB.x,cityB.y);
ctx.stroke();
}
}
任何想法??
更新:之後被建議使用requestAnimationFrame,我出來了這樣的事情。這是最好的Approuch嗎? 我更新了一個名爲「跑」上單擊事件
var run = 0;
function animate() {
if(run > 0) {
ga.startEvolution(1);
run--;
}
addLines(ga.getBestCreature());
requestAnimationFrame(animate);
}
animate();
好的工作,但我不得不修改它,現在我不認爲這是最好的做法。我發現wihtin for循環,requestAnimationFrame不會觸發,並會等待循環結束。所以我所做的基本上是將我的邏輯添加到animate()方法中。您可以在我的問題結尾處查看我的情況,我已將它添加到那裏 – Hasholef