zoukankan      html  css  js  c++  java
  • Canvas学习笔记——拖曳与投掷物体

    首先用一个例子来演示这个效果:

    鼠标可以拖曳和投掷小球

     

    拖曳功能比较简单,主要难点在如何计算投掷时的速度。

    用一张图来说明:

    物体在动画行进一帧的间隔内从a点被鼠标拖动到了b点,很显然在这个过程中物体的运动速度为:

    vx = b.x - a.x;
    vy = b.y - a.y;

    只要在鼠标按下时记录小球的位置,然后在拖动时不断计算小球当前位置与旧位置的距离,就能得到小球的速度:

    canvas.addEventListener('mousedown',function() {
        oldX = ball.x;
        oldY = ball.y;
    
        canvas.addEventListener('mousemove',onMouseMove,false);
        canvas.addEventListener('mouseup',onMouseUp,false);
    },false);
    
    function onMouseMove() {
        ball.x = mouse.x;
        ball.y = mouse.y;
    }
    
    function onMouseUp() {
               canvas.removeEventListener('mousemove',onMouseMove,false);
        canvas.removeEventListener('mouseup',onMouseUp,false);
    }
    
    function trackVelocity() {
                vx = ball.x - oldX;
                vy = ball.y - oldY;
                oldX = ball.x;
                oldY = ball.y;
    }
    
    (function() {
                window.requestAnimFrame(arguments.callee,canvas);
                ctx.clearRect(0,0,canvas.width,canvas.height);
                trackVelocity();
                ball.draw(ctx);
    })();
  • 相关阅读:
    echarts x轴文字显示不全(xAxis文字倾斜比较全面的3种做法值得推荐)
    从输入URL到页面加载的过程?由一道题完善自己的前端知识体系!
    浏览器多进程架构、浏览器内核多线程、js单线程、GUI 渲染线程 与 JavaScript引擎线程互斥 原理
    通过script src引入ElementUI时,使用语句:window.ELEMENT.MessageBox.alert(xxx) 调用弹出框
    计算2个日期之间的天数
    js 字符串转对象
    requestAnimationFrame 知识点
    vue项目权限控制
    css中权重与继承
    Flex Basis与Width的区别
  • 原文地址:https://www.cnblogs.com/undefined000/p/5218539.html
Copyright © 2011-2022 走看看