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();
画(