构建Canvas动画框架灵与肉的结合

开发 前端
之前写过的一个动画框架,并没有把运动独立出来。这样造成的后果就是,每个动画对象没有自己的运动个性!如果我们批量创建一百个动画对象,并且想让它们每一个都拥有自己的运动属性,将非常麻烦。

[[84440]]

今天一直在弄css3的立体效果,发现如果结合canvas和css3的3d,可以做出很多不可思议的效果来,大家可以发挥想象力!

接着上节讲canvas动画框架:

1.通用类的提取:动画对象与帧对象

2.灵与肉的结合:便于拆卸的运动方程

3.进度条的实现:canvas的图片预加载

4.demo测试:通过一个demo测试框架

这一节我们先来说说运动方程的叠加。

之前写过的一个动画框架,并没有把运动独立出来。这样造成的后果就是,每个动画对象没有自己的运动个性!如果我们批量创建一百个动画对象,并且想让它们每一个都拥有自己的运动属性,将非常麻烦。

所以,将运动与形式相分离,是***的解决方案。

上节构建canvas动画框架通用类的提取提到过,我们为Aniele动画对象创建了它自己的运动方程库motionFncs。那么怎么操作这个运动方程库呢?

  1.   //添加运动方法  
  2.      addMotionFnc:function (name,fnc) {  
  3.         this.motionFncs[name]=fnc;  
  4.     },  
  5.     //删除运动方法  
  6.     deleMotionFnc:function(name){  
  7.         this.motionFncs[name]=null;  
  8.     },  
  9.     //遍历运动方法库里的所有运动方法  
  10.     countMotionFncs:function () {  
  11.         for (var i=0; i<this.motionFncs.length; i++) {  
  12.             if(this.motionFncs[i]==null)  
  13.                 continue;  
  14.             this.motionFncs[i].call(this);  
  15.         }  
  16.     }

上节已经介绍过,在Aniele动画对象中,我们添加了以上运动方法。

其中countMotionFncs是非常重要的一个方法,通过它的核心语句:this.motionFncs[i].call(this),我们把运动方程的this指针更改为动画对象,相当于把命令给了动画对象,动画对象就会乖乖地区执行一遍,比如我们定义了一个运动方程pass

  1. function pass(){  
  2.     thisthis.loca.x-=this.speed.x;  

我们定义一个小人的动画对象:

  1. man=new Aniele(); 

那么我可以用这个方法把运动方程添加到man的运动方法库里面:

  1. man.addMotionFnc(0,run); 

这样,这个小man就拥有了一个运动属性,只要我们在每一帧都执行一下这个运动方程,就可以实现man的运动了!

运动方程库中我们可以添加多个运动方程,运动方程会叠加而不互相影响,方便我们写出非常复杂的运动;并且在运动方程库中,我们不仅可以制定运动对象坐标的改变规则(运动),还可以随意改变运动对象的其他属性,包括透明度,翻转,缩放等等。

原文链接:http://www.cnblogs.com/shawn-xie/archive/2012/07/11/2586728.html

【编辑推荐】

  1. 构建canvas动画框架通用类的提取
  2. HTML 5 Canvas组件绘制太极图案
  3. 使用JavaScript和Canvas写一个游戏框架
  4. 使用 HTML5 canvas 绘制精美的图形
  5. HTML5 Canvas基础教程
责任编辑:张伟 来源: shawn.xie的博客
相关推荐

2012-07-11 15:54:59

canvas

2012-07-13 13:52:54

Canvas

2017-03-13 15:00:15

AndroidTransition 动画框架

2022-03-09 09:00:41

SwiftUI视图生成器Swift

2022-03-23 14:57:48

canvasjavascript运动小球

2017-04-05 16:30:09

Node.jsFFmpeg Canvas

2014-12-19 15:42:33

DragonBones

2015-10-08 08:48:44

HTML5canvas动画

2016-01-20 10:11:56

华丽CanvasHTML5

2024-01-19 16:35:00

模型动画

2023-12-12 13:42:00

微服务生态系统Spring

2022-06-08 12:10:56

canvasvue.js

2010-08-26 15:36:30

DHCP路由

2016-10-20 15:54:12

CanvasHtml5Javascript

2011-06-03 17:06:09

自动化测试

2022-07-21 07:05:13

粒子动画CSS

2023-09-14 15:37:11

2011-11-25 13:14:16

2017-08-16 08:45:50

EVPNVXLAN网络

2015-08-19 09:58:03

数据中心高效数据中心
点赞
收藏

51CTO技术栈公众号