HTML5入门

html5 实现动画(三)

字号+ 作者: 来源: 2014-11-16 20:49 我要评论( )

XML/HTML Code 复制内容到剪贴板 canvas id = canvas3 width = 250 height = 300 style = background-color:black 你的浏览器不支持 canvas 标签,请使用Chrome浏览器或者FireFox浏览器 / canvas br / 帧数: input id = tx

XML/HTML Code复制内容到剪贴板
  1. <canvas id="canvas3" width="250" height="300" style="background-color:black">   
  2.     你的浏览器不支持 <canvas>标签,请使用 Chrome 浏览器 或者 FireFox 浏览器   
  3. </canvas><br/>   
  4. 帧数:<input  id="txt4" type="text" value="10"/><br/>   
  5. 速度:<input type="text" id="txt5" value="5"/><br/>   
  6. 比例:<input type="text" id="txt6" value="2"/><br/>   
  7. <input type="button" value="开始" onclick="animate()"/>   
  8. <input type="button" value="暂停" onclick="stop()"/>   
  9. <script type="text/javascript">   
  10.     //定时器   
  11.     var interval=null;   
  12.     //停止动画   
  13.     function stop(){   
  14.         clearInterval(interval);   
  15.     }   
  16.     //===================================================================   
  17.     //精灵登场   
  18.     //====================================================================   
  19.     //每一帧在大图中的位置   
  20.     var frames=[];   
  21.     frames[0]=[0,4,19,19];   
  22.     frames[1]=[22,1,24,19];   
  23.     frames[2]=[49,0,18,17];   
  24.     frames[3]=[1,32,18,17];   
  25.     frames[4]=[22,33,24,19];   
  26.     frames[5]=[49,36,19,19];   
  27.     //精灵类   
  28.     function Sprite(dx,dy,delta,fps){   
  29.         this.dx=dx;   
  30.         this.dy=dy;   
  31.         this.fps=fps;   
  32.         this.delay=1000/fps;   
  33.         this.last_update=0;   
  34.         //移动速度   
  35.         this.delta=-delta;   
  36.         //帧编号   
  37.         this.index=0;   
  38.         //方向   
  39.         this.dir_left=true;   
  40.     }   
  41.     Sprite.prototype.update=function(canvas){   
  42.         //获取当前时间   
  43.         var now=(new Date()).getTime();   
  44.         if((now-this.last_update)>this.delay){   
  45.             if(this.dir_left){   
  46.                 //方向朝左,只绘制0 1 2帧   
  47.                 if(this.index>2)   
  48.                     this.index=0;   
  49.             }   
  50.             else{   
  51.                 //方向朝右,只绘制 3 4 5 帧   
  52.                 if(this.index>5)   
  53.                     this.index=3;   
  54.             }   
  55.             //取出当前帧的坐标   
  56.             this.frame=frames[this.index];   
  57.             //当前帧在大图中的位置   
  58.             thisthis.sx=this.frame[0];   
  59.             thisthis.sy=this.frame[1];   
  60.             thisthis.sw=this.frame[2];   
  61.             thisthis.sh=this.frame[3];   
  62.             //当前帧大小   
  63.             thisthis.dw=this.frame[2];   
  64.             thisthis.dh=this.frame[3];   
  65.             //改变 x 坐标   
  66.             thisthis.dx=this.dx+this.delta;   
  67.             //左边缘检测   
  68.             if(this.dx<0){   
  69.                 this.dx=0;   
  70.                 //转向   
  71.                 this.delta=-this.delta;   
  72.                 this.dir_left=false;   
  73.                 this.index=3;   
  74.             }   
  75.             //右边缘检测   
  76.             if((this.dx+this.dw)>canvas.getAttribute("width")){   
  77.                 this.dx=canvas.getAttribute("width")-this.dw;   
  78.                 //转向   
  79.                 this.delta=-this.delta;   
  80.                 this.dir_left=true;   
  81.                 this.index=0;   
  82.             }   
  83.             thisthis.dy=this.dy;//y 不移动   
  84.             this.index++;   
  85.             this.last_update=now;   
  86.         }   
  87.     }   
  88.     function animate(){   
  89.         //停止动画   
  90.         stop();   
  91.         //移动速度   
  92.         var delta=parseInt(document.getElementById('txt4').value);   
  93.         //每秒绘制多少次   
  94.         var fps=parseInt(document.getElementById('txt5').value);   
  95.         //比例   
  96.         var scale=parseInt(document.getElementById('txt6').value);   
  97.         //画布对象   
  98.         var canvas=document.getElementById("canvas3")   
  99.         //获取上下文对象   
  100.         var ctx = canvas.getContext("2d");   
  101.         //清空画布   
  102.         ctx.clearRect(0,0,canvas.getAttribute("width"),canvas.getAttribute("height"));   
  103.         var img=new Image();   
  104.         img.src="http://www.crazyfrom.com/images/2010/10/sprite.gif";   
  105.         var sprite=new Sprite(120,150,delta,fps);   
  106.         interval = setInterval(function(){   
  107.             //清空画布   
  108.             ctx.clearRect(0,0,canvas.getAttribute("width"),canvas.getAttribute("height"));   
  109.             //更新数据   
  110.             sprite.update(canvas);   
  111.             //保存状态   
  112.             ctx.save();   
  113.             //移动坐标   
  114.             ctx.translate(sprite.dx,sprite.dy);   
  115.             ctx.scale(scale,scale);   
  116.             ctx.drawImage(img,sprite.sx,sprite.sy,sprite.sw,sprite.sh,0,0,sprite.dw,sprite.dh);   
  117.             //恢复状态   
  118.             ctx.restore();   
  119.         },1);   
  120.     }   
  121. </script>   

源码下载:donghua3.rar

 

 

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

相关文章
  • 超级绚丽的html5的页面

    超级绚丽的html5的页面

    2014-11-16 20:49

  • HTML5基础,第4部分:点睛之笔Canvas

    HTML5基础,第4部分:点睛之笔Canvas

    2014-11-16 20:49

  • HTML5基础,第3部分:HTML5 API的威力

    HTML5基础,第3部分:HTML5 API的威力

    2014-11-16 20:49

  • HTML5基础,第2部分:组织页面的输入

    HTML5基础,第2部分:组织页面的输入

    2014-11-16 20:49

网友点评