利用对象思想来绘制canvas帧动画
绘制思路:
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帧动画的更多相关文章
- 神奇的canvas——点与线绘制的绚丽动画效果
代码地址如下:http://www.demodashi.com/demo/11636.html 前言 之前在某网站上看到了一个canvas绘制的动画效果,虽然组成的元素很简单,只有点和线,但是视觉效果 ...
- 第165天:canvas绘制圆环旋转动画
canvas绘制圆环旋转动画——面向对象版 1.HTML 注意引入Konva.js库 <!DOCTYPE html> <html lang="en"> &l ...
- 利用css3-animation来制作逐帧动画
前言 趁着还没有元旦之前先码一篇文章,不然到时候估计又被各种虐了,所以趁现在还有力气先来一篇.今天来聊聊css3中的动画属性animation,对这个属性懵懂是在很早的时候有前辈用这个 animati ...
- 自己定义View时,用到Paint Canvas的一些温故,简单的帧动画(动画一 ,"掏粪男孩Gif"顺便再提提onWindowFocusChanged)
转载请注明出处:王亟亟的大牛之路 之前在绘画的过程中提到了静态的旋转啊,缩放啊,平移等一些效果.那么自己定义的View当然也有动态的效果也就是我们的Animation.经常使用的有三种 View An ...
- Android游戏开发研究帧动画实现
1.动画的原则框架 帧的动画帧的动画顾名思义,画就是帧动画. 帧动画和我们小时候看的动画片的原理是一样的,在同样区域高速切换图片给人们呈现一种视觉的假象感觉像是在播放动画,事实上只 ...
- 利用javascript和WebGL绘制地球 【翻译】
利用javascript和WebGL绘制地球 [翻译] 原翻译:利用javascript和WebGL绘制地球 [翻译] 在我们所有已知的HTML5API中,WebGL可能是最有意思的一个,利用这个AP ...
- 图形绘制 Canvas Paint Path 详解
图形绘制简介 Android中使用图形处理引擎,2D部分是android SDK内部自己提供,3D部分是用Open GL ES 1.0.大部分2D使用的api都在android.grap ...
- 使用javascript和css模拟帧动画的几种方法浅析
我们平时在开发前端页面的时候,经常会播放一段帧序列.这段帧序列就像gif图片那样,反复循环播放.那大家可能会说,直接用gif图片就好了,干嘛还去模拟呢?那是因为要做得更加灵活,我们要做到以下几点: 1 ...
- HTML5标签canvas制作动画
摘要: canvas可以绘制图像,自然而然的就可以制作动画,因为动画的每一帧都是图像.我们可以利用javascript的setInterval函数来实现动画效果. 下面是一个例子,小圆绕着红点圆心不停 ...
随机推荐
- python中in在list和dict中查找效率比较
转载自:http://blog.csdn.net/wzgbm/article/details/54691615 首先给一个简单的例子,测测list和dict查找的时间: ,-,-,-,-,,,,,,] ...
- linux bash Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
在linux下配置shell参数说明 前面已经讲到,变量名只能包含数字.字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量. 例如,$ 表示当前Shell进程的ID,即pid ...
- Swift教程_swift常见问题(0005)_完美解决Cannot override 'dealloc'异常
Swift教程_swift常见问题(0001)_CoreData: warning: Unable to load class named 'xxx' for entity 'xxx' Swift教程 ...
- Web文件管理、私有云存储管理工具 DzzOffice
DzzOffice-大桌子办公系统本身是一款图形化,简单易用的网盘管理软件.可以实现将企业的局域网服务器.企业私有云存储.企业租用的公有云存储(如阿里云OSS).企业员工的私有云存储(如百度网盘.Dr ...
- linux 和windows系统下同时可用的UML建模工具(umbrello),超强
原文地址:linux 和windows系统下同时可用的UML建模工具(umbrello),超强 作者:zhangjiakouzf OPEN SOURCE 的 UML建模工具 -- umbrello ...
- Linux下动态共享库加载时的搜索路径详解
对动态库的实际应用还不太熟悉的读者可能曾经遇到过类似“error while loading shared libraries”这样的错误,这是典型的因为需要的动态库不在动态链接器ld.so的搜索路径 ...
- VC线程同步方法
VC MFC中线程同步对象的区别 临界区 CCriticalSection,在用户模式工作,适用于保护线程间共享资源,一个线程可以多次Lock不会出错.不支持在多进程之间工作.互斥量 CM ...
- Web Service——CXF+Spring 整合
结合spring框架来实现CXF发布SOAP协议的服务,步骤基本相同,所不同的是的多了一些配置项,步骤如下 1. 服务端 第一步:创建web项目(引入jar包) 第二步:创建SEI接口 import ...
- ubuntu发热问题的解决——显卡驱动的安装
为了支持自由软件事业,本人作出了“一生中最有意义“的决定:将工作环境从Windows转移到Linux中来!于是装上了ubuntu-10.10,但是用了一小段时间后发现本本发热超大,于是Google百度 ...
- C#将Access数据库导出为JSON
一个Access数据库包含若干首诗歌,每首诗有content.author.title.description四个字段 using System; using System.Data; using S ...