绘制思路:

1.封装一个对象出来:

2.属性: width . height imgSr speed dir
3.行为: render changeDir

html文件:

 <script>
(function(){
var canvas = document.querySelector( '#cavsElem' );
var ctx = canvas.getContext( '2d' );
canvas.width = 600;
canvas.height = 600;
canvas.style.border = "1px solid #000";
var s=new Sprite({
x:300,//在画布上的坐标
y:300,
w:80,//画布上的宽高
h:130,
fps:4,//速度
originW:40,//截取的精灵图片中的精灵的宽高。
originH:65,
imgSrc:'gameImgs/DMMban.png'
});
s.render(ctx);
var btnLeft = document.getElementById('btn-dir-left');
btnLeft.onclick = function() {
s.changeDir('right');
};
var btnRight = document.getElementById('btn-dir-right');
btnRight.onclick = function() {
s.changeDir('right');
};
var btnUp = document.getElementById("btn-dir-up");
btnUp.onclick = function() {
s.changeDir('up');
};
var btnDown = document.getElementById('btn-dir-down');
btnDown.onclick = function() {
s.changeDir('down');
};
}());
</script>

js文件:

 <script>
function Sprite( option ) {
//构造函数执行的时候,立即调用初始化的函数
this._init( option );
}
Sprite.prototype = {
//初始化
_init: function( option ) {
this.x = option.x === 0 ? 0 : (option.x || 10);//在画布上的坐标
this.y = option.y === 0 ? 0 : (option.y || 10);//
this.w = option.w || 40; // 绘制到canvas上的宽高
this.h = option.h || 65;
this.fps = option.fps || 10; // frame per second
this.originW = option.originW || 40; // 截取的精灵图片中的 精灵的宽高。
this.originH = option.originH ||65;
this._dirIndex = 0;
this._imgSrc = option.imgSrc || '';
},
//渲染当前动画
render: function( ctx ) {// 把自己画 到画布上去
//第一步: 把图片加载
var img = new Image();
img.src = this._imgSrc;
var self = this;
img.onload = function() {
var frameIndex = 0;
// this == img
// 第二步:加载完图片后,启动一个时钟,不停的渲染动画
setInterval(function(){
ctx.clearRect( 0,0 , ctx.canvas.width , ctx.canvas.height);
ctx.drawImage(
img //绘制的原始图片
, frameIndex * self.originW // 剪切图片的x坐标
, self._dirIndex * self.originH
, self.originW
, self.originH
, self.x
, self.y
, self.w
, self.h
);
frameIndex ++ ;
frameIndex %= 4;
}, 1000 / self.fps)
}
},
//改变方向
changeDir: function( dir ) {
if( dir == 'left' ) {
this._dirIndex = 1;
}
if( dir == 'right' ) {
this._dirIndex = 2;
}
if( dir == 'up' ) {
this._dirIndex = 3;
}
if( dir == 'down' ) {
this._dirIndex = 0;
}
}
};
</script>

利用对象思想来绘制canvas帧动画的更多相关文章

  1. 神奇的canvas——点与线绘制的绚丽动画效果

    代码地址如下:http://www.demodashi.com/demo/11636.html 前言 之前在某网站上看到了一个canvas绘制的动画效果,虽然组成的元素很简单,只有点和线,但是视觉效果 ...

  2. 第165天:canvas绘制圆环旋转动画

    canvas绘制圆环旋转动画——面向对象版 1.HTML 注意引入Konva.js库 <!DOCTYPE html> <html lang="en"> &l ...

  3. 利用css3-animation来制作逐帧动画

    前言 趁着还没有元旦之前先码一篇文章,不然到时候估计又被各种虐了,所以趁现在还有力气先来一篇.今天来聊聊css3中的动画属性animation,对这个属性懵懂是在很早的时候有前辈用这个 animati ...

  4. 自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,&quot;掏粪男孩Gif&quot;顺便再提提onWindowFocusChanged)

    转载请注明出处:王亟亟的大牛之路 之前在绘画的过程中提到了静态的旋转啊,缩放啊,平移等一些效果.那么自己定义的View当然也有动态的效果也就是我们的Animation.经常使用的有三种 View An ...

  5. Android游戏开发研究帧动画实现

     1.动画的原则框架        帧的动画帧的动画顾名思义,画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在同样区域高速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,事实上只 ...

  6. 利用javascript和WebGL绘制地球 【翻译】

    利用javascript和WebGL绘制地球 [翻译] 原翻译:利用javascript和WebGL绘制地球 [翻译] 在我们所有已知的HTML5API中,WebGL可能是最有意思的一个,利用这个AP ...

  7. 图形绘制 Canvas Paint Path 详解

    图形绘制简介        Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0.大部分2D使用的api都在android.grap ...

  8. 使用javascript和css模拟帧动画的几种方法浅析

    我们平时在开发前端页面的时候,经常会播放一段帧序列.这段帧序列就像gif图片那样,反复循环播放.那大家可能会说,直接用gif图片就好了,干嘛还去模拟呢?那是因为要做得更加灵活,我们要做到以下几点: 1 ...

  9. HTML5标签canvas制作动画

    摘要: canvas可以绘制图像,自然而然的就可以制作动画,因为动画的每一帧都是图像.我们可以利用javascript的setInterval函数来实现动画效果. 下面是一个例子,小圆绕着红点圆心不停 ...

随机推荐

  1. 文本框只支持数字、小数点、退格符、负号、Del键

    Public Function OnlyNumberAndDot(inKeyAscii As Integer) As Integer '函数说明:文本框只支持数字.小数点.退格符.负号.Del键 '入 ...

  2. linux远程

    apt-get install rdesktop $rdesktop -u administrator -p ****** -a 16 192.168.1.1 //都直接登陆了,

  3. 算法练习--- DP 求解最长上升子序列(LIS)

    问题描写叙述: 对于2,5,3,1,9,4,6,8,7,找出最长上升子序列的个数 最长上升子序列定义: 对于i<j i,j∈a[0...n] 满足a[i]<a[j] 1. 找出DP公式:d ...

  4. 1、配置JAVA的环境变量

    想要成功配置Java的环境变量,那肯定就要安装JDK,才能开始配置的. 想要成功配置Java的环境变量,那肯定就要安装JDK,才能开始配置的. 安装JDK 向导进行相关参数设置.如图:   正在安装程 ...

  5. Centos6.5搭建dhcpd服务

    dhcpd动态获取ip地址,对于小型局域网很便利的.在不大的网络社会静态ip也是不错的! 环境 centos6.5  10.10.24.1 (dns-server)   winxp sp3 (clie ...

  6. iOS- 非整星的评分控件(支持小数)

    概述 订单评论里实现星级评分控件: 简单整星评价与非整星的精评价. 详细 代码下载:http://www.demodashi.com/demo/10711.html 现在很多应用都有评分功能. 有了订 ...

  7. Nginx配置error_page 404错误页面

    问题由来 昨天一网友在segmentfault.com上提问,无法做404重定向 打开对方的网站随便输入一个错误的地址发现给出了404代码,但是页面完全空白,并没有显示404页面的设定内容 当时就明白 ...

  8. Git恢复之前版本的两种方法reset、revert(图文详解)

    一.问题描述在利用github实现多人合作程序开发的过程中,我们有时会出现错误提交的情况,此时我们希望能撤销提交操作,让程序回到提交前的样子,本文总结了两种解决方法:回退(reset).反做(reve ...

  9. C#中的Invoke和BeginInvoke

    一.Control#Invoke() 和Control#BeginInvoke() 在非UI线程中调用MessageBox.Show()结果是非模态对话框: 在UI线程中调用MessageBox.Sh ...

  10. Android快速开发不可或缺的11个工具类(下载)

    功能分类:工具     支持平台:Android     运行环境:Eclipse 开发语言:Java      开发工具:Eclipse         源码大小:11.45KB   下载地址:ht ...