美文网首页
二维CANVAS动画(自适应帧率)

二维CANVAS动画(自适应帧率)

作者: 英俊又可爱XD | 来源:发表于2018-01-15 19:35 被阅读0次

CANVAS中实现动画有两种方式:

方式一:JS普通计时器

以60帧率速度为例:setInterval(func, 16.7);

  • 缺点:setInterval会丢帧
方式二:专门做CANVAS动画的方法,自适应浏览器的帧率

window.requestAnimationFrame(func);

  • 用法:递归(在函数中调用自己)调用,来执行动画函数func
  • 注意:需要手动调用第一次

CANVAS动画案例:弹球

场景:canvas画板中印制小球进行弹射的自由运动。
呈现效果:


弹球实现.gif

给出小球的起点、终点、运动方向(x轴方向和y轴方向)。

小球的实际运动方向,为xspeed与yspeed的合力(妈蛋理科基础差学起来真费劲)
小球每一步的布长由xspeed与yspeed决定(具体数值做勾股运算可得出)
触边条件:小球的绘制参考点为圆心(x,y),故判断条件为实时x,y值
触边后,只需将相应方向(水平或垂直)的速度取相反数即可


弹球动画分析.png

代码实现:

<script>
    var canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
    var x=20;   //起点坐标x
    var y=200;   //起点坐标y
    //x与y轴方向加速度
    var xspeed = 2;
    var yspeed = -3;
    //一步draw函数:画球
    function draw(){
            //水平位置到达左边或右边,则翻转水平速度方向
        if(x<20 || x>canvas.width-20){
            xspeed = -xspeed;
        }    //垂直位置到达上边沿或下边沿,则翻转垂直速度方向
        if(y<20 || y>canvas.height-20){
            yspeed = -yspeed;     
        }   
        context.clearRect(0, 0, canvas.width, canvas.height);  //擦除上一步球
        context.beginPath();   //换新纸
        context.arc(x, y, 20, 0, 2*Math.PI);   //画圆
        context.fill();  //填充印制
        x += xspeed;  //下一步球的x坐标值
        y += yspeed;  //下一步球的y坐标值
        window.requestAnimationFrame(draw);  //动画:递归调用自适应帧率
    }
    draw();   //第一次调用,触发动画
</script>

2018.1.15

相关文章

  • 二维CANVAS动画(自适应帧率)

    CANVAS中实现动画有两种方式: 方式一:JS普通计时器 以60帧率速度为例:setInterval(func,...

  • threejs性能优化手段

    Three.js控制渲染帧率(FPS) 如果场景有动画效果,就必须周期性执行.render()更新canvas画布...

  • 2017-12-26

    requestAnimationFrame 一、流畅的web动画 Web 动画帧率(FPS): 每秒钟画面更新的次...

  • canvas 知识点

    !!!以下示例依托 vue 环境!!! canvas 自适应屏幕宽高 canvas 外层套一个 div 在 mou...

  • UGUI之UI粒子特效自适应缩放

    我们UI自适应采用的是Canvas Scaler 设置 Expand模式。 那么UI可以很好的自适应屏幕,可是粒子...

  • Web动画性能介绍

    在谈动画性能之前,先介绍一些概念。 帧率(FPS) 帧率(FPS):描述每秒播放的帧数,单位为 Hz 或者 fra...

  • Hexo Next 背景动画Canvas_nest: true设

    Canvas_nest背景动画 由于在Next 6.0后设置 Canvas_nest: true 是背景将会有动画...

  • 卡顿与帧率的关系

    结合关于帧率的一些知识点这篇文章,可以得出卡顿与帧率的一些关系. 帧率稳定,但过低时: 持续低于12fps时,动画...

  • 视频基础01 丨 视频帧率是什么?有什么用?

    什么是帧率? 什么是帧率? 我们要先了解一下什么是视频动画。 视频动画其实就是由一张张连贯起来的照片连续播放组成的...

  • 2018-08-22

    动画技术向 canvas动画,是AN可以输出的吗?json文件又是属于什么动画的?和canvas是不同的格式的吧?

网友评论

      本文标题:二维CANVAS动画(自适应帧率)

      本文链接:https://www.haomeiwen.com/subject/ividoxtx.html