canvas教程

canvas学习案例之简单的物理运动

字号+ 作者:H5之家 来源:H5之家 2017-10-06 09:03 我要评论( )

这次主要写2种简单的运动效果,包括匀速直线运动、匀加速直线运动。在码代码之前先了解下canvas动画效果的基本实现原理,其核心思想是先定义一个初始状态,然后定义一个定时器,定时器内执行一个方法,在这个方法中要清除当前的画面,然后重新绘制需要变化的

这次主要写2种简单的运动效果,包括匀速直线运动、匀加速直线运动。在码代码之前先了解下canvas动画效果的基本实现原理,其核心思想是先定义一个初始状态,然后定义一个定时器,定时器内执行一个方法,在这个方法中要清除当前的画面,然后重新绘制需要变化的效果。由于人眼存在残影,所以短时间内的中断的变化可以看成是连续的变化。

以下代码都是基于下面的html结构

<canvas id="canvas" width="728" height="400"> 你的浏览器不支持canvas,请跟换其他浏览器试一试 </canvas> 匀速直线运动

首先了解下概念:是指运动快慢不变(即速度不变)、沿着直线的运动。

var canvas = document.getElementById('canvas'), ctx = canvas.getContext('2d'), canWid = canvas.width, canHei = canvas.height; ctx.fillStyle = '#0c0'; setInterval(function () { if (startPoint < (-30)) { speed = 0; startPoint = canWid + 30; } run(ctx); }, 80) var speed = 0, //定义速度为0 startPoint = canWid + 30; //小球开始的起点 function run(ctx) { speed = -6; ctx.clearRect(0, 0, canWid, canHei); //清除画布 startPoint += speed; //关键点重新计算坐标,每次都减少6 ctx.beginPath(); ctx.arc(startPoint, canHei / 2, 30, 0, 2 * Math.PI); ctx.closePath(); ctx.fill(); } 匀加速直线运动

匀变速直线运动的定义:在直线运动中,把加速度的大小和方向都不改变的运动(加速度为正时),称之为匀加速直线运动。
2个基本的公式:
速度公式: 速度 = 初始速度 + 加速度x时间
位移公式: 位移 = 初始速度x时间 + 0.5x加速度x时间x时间

var canvas = document.getElementById('canvas'), ctx = canvas.getContext('2d'), canWid = canvas.width, canHei = canvas.height, ballRadius = 30; ctx.fillStyle = '#0c0'; setInterval(function() { if (startPoint < (-1)*ballRadius) { v0 = 0; v = 0; a = 10; time = 0; s = 0; startPoint = canWid + 30; } run(ctx); }, 70) var v0 = 0, v = 0, a = 10, time = 0, s = 0, startPoint = canWid + ballRadius; function run(ctx) { time += 0.1; //控制时间的变化 s = -(0.5 * a * (time * time)); //根据公式计算位移 startPoint += s; ctx.clearRect(0, 0, canWid, canHei); ctx.beginPath(); ctx.arc(startPoint, canHei / 2, ballRadius, 0, 2 * Math.PI); ctx.closePath(); ctx.fill(); }

其中setInterval定时器可以用requestAnimationFrame来代替。
关于requestAnimationFrame的用法可以参考这篇文章

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • IE9上,Canvas画图的有关问题

    IE9上,Canvas画图的有关问题

    2017-10-06 09:01

  • 移动端video视频播放的痛

    移动端video视频播放的痛

    2017-10-05 17:01

  • Canvas toDataURL图片跨域问题

    Canvas toDataURL图片跨域问题

    2017-10-05 17:00

  • 小程序答疑:跳坑《一百一十一》canvas学习及使用说明

    小程序答疑:跳坑《一百一十一》canvas学习及使用说明

    2017-10-05 15:37

网友点评