javascript - canvas问题
PHPz
PHPz 2017-04-11 11:22:03
[JavaScript讨论组]

绘制圆球匀速下落时每一次的速度比上一次更快,越来越快,不知道问题出在哪里。求解,谢谢各位了。

var canvas = document.getElementById('canvas');
var context = canvas.getContext('2d');
var ball =
{
    x:0,
    y:0,
    r:15,
    vy:12,
    vx:12
}

var drawCircle = function (x,y,r,color)
{
    context.clearRect(0,0,canvas.width,canvas.height);
    context.lineWidth = '5';
    context.beginPath();
    context.arc(x,y,r,0,Math.PI*2,false);
    context.stroke;
    context.fillStyle = color;
    context.closePath();
    context.stroke();
    context.fill();
}

var  update = function ()
{
    ball.y +=ball.vy;
    if (ball.y >= canvas.height - ball.r)
    {
        ball.y = canvas.height - ball.r;
        ball.x -= ball.vx;
    }
}

this.onclick = function (event)
{
    ball.x = event.clientX;
    ball.y = event.clientY;

    setInterval(function ()
    {
        drawCircle(ball.x,ball.y,ball.r,'blue');
        update();
    },100);
}
PHPz
PHPz

学习是最好的投资!

全部回复(1)
迷茫

每次点击都创建了一个定时器,从第2次点击开始,已经不是1个定时器在执行 update 了。

var timer;
this.onclick = function (event)
{
    ball.x = event.clientX;
    ball.y = event.clientY;
    
    timer = setInterval(function ()
    {
        drawCircle(ball.x,ball.y,ball.r,'blue');
        update();
    },100);
}

var  update = function ()
{
    ball.y +=ball.vy;
    if (ball.y >= canvas.height - ball.r)
    {
        ball.y = canvas.height - ball.r;
        ball.x -= ball.vx;
    }
    
    if(...) {
       clearInterval(timer)
    }
}

满足某种条件,比如运动完毕后,记得清除定时器。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号