内HTML5のキャンバスを描画する方法:私は、forループを通過することだし、毎回私は新しい情報を入手し、キャンバスに描きたい私は次の操作を行うためにtrtingだループ
。 問題は、ループが終了した直後にキャンバスが描画されているため、アニメーションが表示されないことです。 デバッグや警告メッセージを表示すると、immediatlyでキャンバスに描画されます。どうしたらいいですか?
ここに私のコードがありますが、私は既に複数の方法で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を使用するように勧められた後、私はこのようなものを出しました。これは最善のことですか? 私はあなたがを見て取ることができるクリックイベント
var run = 0;
function animate() {
if(run > 0) {
ga.startEvolution(1);
run--;
}
addLines(ga.getBestCreature());
requestAnimationFrame(animate);
}
animate();
それはうまくいったが、私はそれを修正しなければならなかった。今はこれがベストプラクティスだとは思わない。私はforループで気付いた、requestAnimationFrameは起動せず、ループが終了するのを待ちます。だから私は基本的に私のロジックをanimate()メソッドに追加しています。あなたは私の質問の終わりに私をチェックすることができます、私はそこにそれを追加しました – Hasholef