編集: Chrome はブラウザを更新しました。内部のバグが修正され、この問題は発生しなくなったため、この質問は多少冗長です。
キャンバスの中央に固定された円のアニメーションがあります。
円が大きくなるほど、動きが不安定になります。しかし、それだけではありません。少なくとも私にとっては、Chrome と Firefox では動作が著しく悪くなります。
計算は次の関数で行われます:
function update(deltaTime){
var centerX = canvas.width/2;
var centerY = canvas.height/2;
i.currentAngle = (i.currentAngle || 0) + (deltaTime/1000 * i.rotationSpeed);
if(i.currentAngle>2*Math.PI){
i.currentAngle-=2*Math.PI;
}
i.x = centerX + (i.radius*i.factor) * Math.cos(i.currentAngle);
i.y = centerY + (i.radius*i.factor) * Math.sin(i.currentAngle);
}
これは動作例のコードです:
Chrome 出力:
Firefox 出力:
Firefox は私が目指しているものに最も近いようですが、Chrome はちょっと奇妙です。
なぜこのように異なる結果が得られるのでしょうか? 何人かの人に何が見えるか尋ねてみたところ、人によって不正確さの度合いが異なっていることがわかりました。
ベストアンサー1
問題はJavaScriptの計算ではなく、キャンバス。
function bigCircle(angle) {
var radius = 5000; //the bigger, the worse
var x = canvas.width/2 + radius*Math.cos(angle);
var y = canvas.height/2 + radius*Math.sin(angle);
ctx.beginPath();
ctx.arc(x, y, radius, 0, 2 * Math.PI);
ctx.lineWidth = 2;
ctx.stroke();
}
数字が表示されることに注意してくださいその通りFirefox と同じですが、Chrome では赤い弧が明らかに間違って描画されています。
興味深いことに、これは の倍数であるすべての角度で機能しますMath.PI / 4
が、それらの間の値ではオフになります (そのため、OP の例の波打つ動作が発生します)。
ログインしましたChromium のバグ #320335。
編集:これは2012年5月に最初に報告されたようで、スキア図書館。
現在は次のように解決されています修理済み。