Javascript 没有动画,画布上无休止的循环
我正在尝试创建一个简单的画布,使用Javascript 没有动画,画布上无休止的循环,javascript,canvas,Javascript,Canvas,我正在尝试创建一个简单的画布,使用requestAnimationFrame将点从a移动到B 不幸的是,它没有显示任何内容,动画循环似乎正在走向无限 谁能解释我做错了什么?我可以创建一个标志来显示动画何时应该停止吗 var startX = 10, startY = 10; var endX = 200, endY = 350; var speed = 1; var dx = endX - startX; var dy = endY - startY; var distance = Math
requestAnimationFrame
将点从a移动到B
不幸的是,它没有显示任何内容,动画循环似乎正在走向无限
谁能解释我做错了什么?我可以创建一个标志来显示动画何时应该停止吗
var startX = 10,
startY = 10;
var endX = 200,
endY = 350;
var speed = 1;
var dx = endX - startX;
var dy = endY - startY;
var distance = Math.sqrt(dx * dx + dy * dy);
var moves = distance / speed;
var xunits = (dx / moves);
var yunits = (dy / moves);
var posit = {
x: startX,
y: startY
};
var fps = 60;
var delay = 1000 / 30;
function draw() {
ctx.clearRect(0, 0, canv.width, canv.height);
ctx.save();
ctx.translate(startX, startY);
ctx.beginPath();
ctx.arc(0, 0, 5, 0, Math.PI * 2);
ctx.fill();
ctx.restore();
}
function move() {
startX += dx;
startY += dy;
console.log(posit);
if (moves > 0) {
moves++;
posit.x += xunits;
posit.y += yunits;
}
}
var start = 0;
function animate() {
running = true;
var current = new Date().getTime(),
delta = current - start;
if (delta >= delay) {
move();
draw();
start = new Date().getTime();
}
anim = requestAnimationFrame(animate);
}
animate();
- 您不应使用
和保存
,这些功能用于保存和恢复图像恢复
- 你应该翻译
和posite.x
,而不是posite.y
和startX
startY
- 您正在更改
和startX
,这是不合理的startY
- 您需要一个
来确定是否继续操作if
var canv=document.getElementById('canv'),
ctx=canv.getContext('2d');
var startX=10,
startY=10;
var endX=200,
endY=350;
无功转速=2;
var dx=endX-startX;
var dy=endY-startY;
变量距离=数学sqrt(dx*dx+dy*dy);
var移动=距离/速度;
变量xunits=(dx/moves);
var yunits=(dy/moves);
var posit={
x:startX,
y:斯塔蒂
};
var fps=60;
无功延迟=1000/60;
函数绘图(){
ctx.clearRect(0,0,canv.width,canv.height);
//ctx.save();
翻译(正位x,正位y);
ctx.beginPath();
弧(0,0,5,0,Math.PI*2);
ctx.fill();
ctx.translate(-posit.x,-posit.y);
//ctx.restore();
}
函数move(){
//startX+=dx;
//startY+=dy;
//控制台日志(posit);
如果(移动>0){
移动++;
posit.x+=xunits;
posit.y+=yunits;
}
}
var start=0;
函数animate(){
运行=真;
var current=new Date().getTime(),
增量=电流-启动;
如果(增量>=延迟){
move();
draw();
开始=新日期().getTime();
}
if(位置y
- 您不应使用
保存
和恢复
,这些功能用于保存和恢复图像
- 你应该翻译
posite.x
和posite.y
,而不是startX
和startY
- 您正在更改
startX
和startY
,这是不合理的
- 您需要一个
if
来确定是否继续操作
最终得到一个工作代码:
var canv=document.getElementById('canv'),
ctx=canv.getContext('2d');
var startX=10,
startY=10;
var endX=200,
endY=350;
无功转速=2;
var dx=endX-startX;
var dy=endY-startY;
变量距离=数学sqrt(dx*dx+dy*dy);
var移动=距离/速度;
变量xunits=(dx/moves);
var yunits=(dy/moves);
var posit={
x:startX,
y:斯塔蒂
};
var fps=60;
无功延迟=1000/60;
函数绘图(){
ctx.clearRect(0,0,canv.width,canv.height);
//ctx.save();
翻译(正位x,正位y);
ctx.beginPath();
弧(0,0,5,0,Math.PI*2);
ctx.fill();
ctx.translate(-posit.x,-posit.y);
//ctx.restore();
}
函数move(){
//startX+=dx;
//startY+=dy;
//控制台日志(posit);
如果(移动>0){
移动++;
posit.x+=xunits;
posit.y+=yunits;
}
}
var start=0;
函数animate(){
运行=真;
var current=new Date().getTime(),
增量=电流-启动;
如果(增量>=延迟){
move();
draw();
开始=新日期().getTime();
}
if(位置y
- 您不应使用
保存
和恢复
,这些功能用于保存和恢复图像
- 你应该翻译
posite.x
和posite.y
,而不是startX
和startY
- 您正在更改
startX
和startY
,这是不合理的
- 您需要一个
if
来确定是否继续操作
最终得到一个工作代码:
var canv=document.getElementById('canv'),
ctx=canv.getContext('2d');
var startX=10,
startY=10;
var endX=200,
endY=350;
无功转速=2;
var dx=endX-startX;
var dy=endY-startY;
变量距离=数学sqrt(dx*dx+dy*dy);
var移动=距离/速度;
变量xunits=(dx/moves);
var yunits=(dy/moves);
var posit={
x:startX,
y:斯塔蒂
};
var fps=60;
无功延迟=1000/60;
函数绘图(){
ctx.clearRect(0,0,canv.width,canv.height);
//ctx.save();
翻译(正位x,正位y);
ctx.beginPath();
弧(0,0,5,0,Math.PI*2);
ctx.fill();
ctx.translate(-posit.x,-posit.y);
//ctx.restore();
}
函数move(){
//startX+=dx;
//startY+=dy;
//控制台日志(posit);
如果(移动>0){
移动++;
posit.x+=xunits;
posit.y+=yunits;
}
}
var start=0;
函数animate(){
运行=真;
var current=new Date().getTime(),
增量=电流-启动;
如果(增量>=延迟){
move();
画(