【发布时间】:2011-09-17 01:40:02
【问题描述】:
下面的代码应该围绕一个“不可见”的圆圈旋转一个三角形。它按我的预期工作,但是,三角形有时似乎在这个“圆圈”周围结结巴巴。这东西的 CPU 和内存负载似乎还可以,所以我想知道这是否是舍入和绘图的问题......感谢帮助。
P.S 我正在使用 SetInterval 来建立帧速率。我正在尝试做的事情需要> 30的帧速率。
谢谢。
var canvas = document.getElementById("game_area");
var context = canvas.getContext("2d");
var angle = 0;
var SinA = Math.sin(Math.PI);
var CosA = Math.cos(Math.PI);
var SinB = Math.sin(Math.PI-0.087);
var CosB = Math.cos(Math.PI-0.087);
var SinC = Math.sin(Math.PI+0.087);
var CosC = Math.cos(Math.PI+0.087);
canvas.width = 700;
canvas.height = 700;
var half = (canvas.width/2);
function on_enter_frame(){
SinA = Math.sin(Math.PI+angle);
CosA = Math.cos(Math.PI+angle);
SinB = Math.sin(Math.PI-0.087+angle);
CosB = Math.cos(Math.PI-0.087+angle);
SinC = Math.sin(Math.PI+0.087+angle);
CosC = Math.cos(Math.PI+0.087+angle);
angle+=0.05;
if (angle>(Math.PI*2)){
angle=0;
}
context.clearRect(0,0,500,500);
context.fillStyle = "#FFF";
context.beginPath();
context.moveTo(half+(SinA*50), half+(CosA*50));
context.lineTo(half+(SinB*45), half+(CosB*45));
context.lineTo(half+(SinC*45), half+(CosC*45));
context.closePath();
context.fill();
}
setInterval(on_enter_frame,30);
【问题讨论】:
-
您考虑过使用分层画布吗?也许一次重绘太多了?
-
您不应该将
setInterval用于动画。您应该改用requestAnimationFrame。大多数现代浏览器都支持它。 Microsoft Demo, MDN -
tjameson:只有一件事正在绘制,分层画布有什么帮助? @Derek:我会调查 requestAnimationFrame,你认为这可能是我的问题造成的吗?
标签: javascript html canvas trigonometry