老莫的笔记本  
  
查看: 1221|回复: 0

Canvas运动

[复制链接]

662

主题

878

帖子

5145

积分

超级版主

Rank: 8Rank: 8

积分
5145
发表于 2018-12-12 23:48:23 | 显示全部楼层 |阅读模式
本帖最后由 周大胖子 于 2018-12-13 00:15 编辑

基础理念:让元素在canvas上运动起来,需要使用setInterval() ;
canvas 使用了一个特殊的模式,上屏的元素,立刻被像素化,也就是说:上屏幕的元素,胖爷我将得不到这个“对象的”引用。比如,一个圆形滑到一个ctx上面,此时就是一堆像素点,不是一个整体的对象, 没有任何变量可以得到这个圆形,也就无法改变这个圆形的属性之类。所以canvas事先通话的原理就是: 清屏-》重绘-》清屏-》重绘-》清屏-》重绘-》

注意了,setInterval 只有一个!

在这留一个 面向对象的 canvas 构图模式
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  6. <title>canvas画图</title>
  7. <meta name="description" content="">
  8. <meta name="keywords" content="">
  9. <link href="" rel="stylesheet">
  10. <style>
  11.     .canvasBox{
  12.         border:1px solid #000;
  13.     }
  14. </style>   
  15. </head>
  16. <body>
  17.    
  18.     <canvas class="canvasBox" id="canvas" width="600" height="400"></canvas>
  19.     <br />
  20.     测试项目
  21.     <script>
  22.     var myCanvas = document.getElementById('canvas');
  23.     var ctx = myCanvas.getContext("2d");
  24.     var canvasArr=[];//绘制一个数组存放需要动画的对象
  25.     //构造函数,圆的类
  26.     function Boll(x,y,r,speed){
  27.         this.x = x;         //坐标x
  28.         this.y = y;         //坐标y
  29.         this.r = r;         //半径
  30.         this.speed = speed;     //速度
  31.         // 将自己推入数组中
  32.         canvasArr.push(this);
  33.     }
  34.     // 渲染方法
  35.     Boll.prototype.render = function()
  36.     {
  37.         ctx.beginPath();
  38.         ctx.arc(this.x,this.y,this.r,0,Math.PI*2,true);
  39.      
  40.         ctx.fill();
  41.         // ctx.stroke()
  42.     }
  43.     // 更新方法
  44.     Boll.prototype.update = function()
  45.     {
  46.         this.x +=this.speed;
  47.     }
  48.     let a = new Boll(10,110,30,1);
  49.     let b = new Boll(200,100,90,1);
  50.     let c = new Boll(20,260,50,10);
  51.     setInterval(function(){
  52.         ctx.clearRect(0, 0, 600, 400)
  53.         for(var i=0; i<canvasArr.length; i++){
  54.             canvasArr[i].render();
  55.             canvasArr[i].update();
  56.         }
  57.     }, 20)
  58.   
  59.     </script>
  60. </body>
  61. </html>
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表