Html5游戏框架createJS组件--EaselJS
CreateJS库是一款HTML5游戏开发的引擎,是一套可以构建丰富交互体验的HTML5游戏的开源工具包,旨在降低HTML5项目的开发难度和成本,让开发者以熟悉的方式打造更具现代感的网络交互体验。
掌握了CreateJS可以更方便的完成HTML5的游戏开发。
CreateJS提供了EaselJS、TweenJS、SoundJS和PreLoadJS四款工具:
EaselJS:简化处理HTML5画布 TweenJS:用来帮助调整HTML5和Javascript属性 SoundJS:用来简化处理HTML5 audio PreLoadJS:帮助管理和协调加载中的一些资源
可以在官网的下载页面进行下载JS文件,或者使用直接官方的CDN 链接
EaselJS 库给画布提供了保留图形模式,其中包括一个完整的分层显示列表、一个核心的交互模型以及一个让2D图形在画布上更容易实现的助手类。
开始
最开始我们需要创建一个Stage对象来包装一个画布(Canvas)元素,并且添加一个DisplayObject对象实例作为子类。EaselJS支持:
* 使用 Bitmap 创建图像
* 使用 Shape 和 Graphics 创建矢量图形
* 使用 SpriteSheet 和 Sprite 创建动态的位图
* 使用 Text 创建简单的文本
* 使用 Container 创建保存其他显示对象的容器
所有的显示对象都可以作为子类被添加到舞台(stage)上,或者直接在画布(canvas)上绘制出来。
用户交互
当使用鼠标或者触摸交互时,除了DOM 元素,所有的显示对象都可以调度事件。EaselJS 支持悬停、按压、释放事件,以及一个容易使用的拖放模块。点击 MouseEvent 可以获得更多信息。
实例
1. 使用 Bitmap 创建图像
首先,我们需要引用 EaselJS 文件:
<script src="js/easeljs-0.8.2.min.js"></script>
接着,我们需要在HTML文档中创建一个 canvas 元素:
<canvas id="imageView" width="560" height="410">您的浏览器版本过低,请更换更高版本的浏览器</canvas>
然后,我就可以在 Javascript 代码中创建图像:
// 通过画布ID 创建一个 Stage 实例 var stage = new createjs.Stage("imageView"); // 创建一个 Bitmap 实例 var theBitmap = new createjs.Bitmap("imgs/testImg.jpg"); // 设置画布大小等于图片实际大小 stage.canvas.width = theBitmap.image.naturalWidth; stage.canvas.height = theBitmap.image.naturalHeight; // 把Bitmap 实例添加到 stage 的显示列表中 stage.addChild(theBitmap); // 更新 stage 渲染画面 stage.update();
这样,图像就创建成功了,源码见 easeljs-image.html 。
2.使用 Shape 和 Graphics 创建矢量图形
和上面一样,我们需要添加对 EaselJS的引用以及在HTML文档中,创建canvas元素。然后就是我们自定义的js文件代码:
//Create a stage by getting a reference to the canvas var stage = new createjs.Stage("circleView"); //Create a Shape DisplayObject. var circle = new createjs.Shape(); circle.graphics.beginFill("DeepSkyBlue").drawCircle(0,0,40); //Set position of Shape instance. circle.x = circle.y = 50; //Add Shape instance to stage display list. stage.addChild(circle); //Update stage will render next frame stage.update();
这样我们就创建了一个深天蓝色,圆心为(50.50),半径为40像素的圆形(源码见 easeljs-shape-circle.html):
渲染前的画布如下(宽高为100像素):
我们还可以添加简单的交互事件:
stage.addEventListener("click",handleClick); function handleClick() {// Click happened;console.log("The mouse is clicked."); } stage.addEventListener("mousedown",handlePress); function handlePress() {// A mouse press happened.// Listen for mouse move while the mouse is down:console.log("The mouse is pressed.");stage.addEventListener("mousemove",handleMove); } function handleMove() {// Check out the DragAndDrop example in GitHub for moreconsole.log("The mouse is moved."); }
当我们点击圆的事件,控制台会显示:
The mouse is pressed. The mouse is clicked.
我们还可以通过 tick 事件进行图形的移动等动画效果(源码见 easeljs-shape-circle-move.js):
// Update stage will render next frame createjs.Ticker.addEventListener("tick",handleTick); //添加一个Ticker类帮助避免多次调用update方法 function handleTick() {var maxX = stage.canvas.width - 50;var maxY = stage.canvas.height - 50;//Will cause the circle to wrap backif(circle.x < maxX && circle.y == 50){// Circle will move 10 units to the right.circle.x +=10;}else if(circle.x == maxX && circle.y <maxY){circle.y +=10;}else if(circle.x > 50 && circle.y == maxY){circle.x -=10;}else if(circle.x<= 50){circle.y -=10;}stage.update(); }
效果:
3.使用 SpriteSheet 和 Sprite 创建动态的位图
同样,先对 EaselJS 进行引用,然后创建 canvas HTML元素:
<canvas id="view" width="80" height="80"></canvas>
需要使用到的图片:
接下来在 JS 文件中对资源进行引用加载:
var stage = new createjs.Stage("view"); container = new createjs.Container(); var data = {// 源图像的数组。图像可以是一个html image实例,或URI图片。前者是建议控制堆载预压images:["imgs/easeljs-preloadjs-animation/moveGuy.png"],// 定义单个帧。有两个支持格式的帧数据:当所有的帧大小是一样的(在一个网格), 使用对象的width, height, regX, regY 统计特性。// width & height 所需和指定的帧的尺寸// regX & regY 指示帧的注册点或“原点”// spacing 表示帧之间的间隔// margin 指定图像边缘的边缘// count 允许您指定在spritesheet帧的总数;如果省略,这将根据源图像的尺寸和结构计算。帧将被分配的指标,根据他们的位置在源图像(左至右,顶部至底部)。frames:{width:80,height:80, count:16, regX: 0, regY:0, spacing:0, margin:0},// 一个定义序列的帧的对象,以发挥命名动画。每个属性对应一个同名动画。// 每个动画必须指定播放的帧,还可以包括相关的播放速度(如2 将播放速度的两倍,0.5半)和下一个动画序列的名称。 animations:{run:[0,3]} } var spriteSheet = new createjs.SpriteSheet(data) var instance = new createjs.Sprite(spriteSheet,"run")container.addChild(instance); stage.addChild(container); createjs.Ticker.setFPS(5); //设置帧 createjs.Ticker.addEventListener("tick",stage); stage.update();
这样,简单走路的效果就出来了(源码见 easeljs-sprite-01.html):
如果想通过按钮控制动画的变换的话使用 gotoAndPlay(action) 方法调用对应的动画效果就行了。
我们修改HTML文档代码如下:
<canvas id="view" width="80" height="80"></canvas> <div class="buttons"><input id="goStraight" value="Go Straight" type="button" /><input id="goLeft" value="Go Left" type="button"/><input id="goRight" value="Go Right" type="button"/><input id="goBack" value="Go Back" type="button"/> </div>
然后修改JS代码如下:
var stage = new createjs.Stage("view"); container = new createjs.Container(); var data = {images:["imgs/easeljs-preloadjs-animation/moveGuy.png"],frames:{width:80,height:80, count:16, regX: 0, regY:0, spacing:0, margin:0},animations:{stand:0,run1:[0,3],run2:[4,7],run3:[8,11],run4:[12,15]} } var spriteSheet = new createjs.SpriteSheet(data) var instance = new createjs.Sprite(spriteSheet,"run1")container.addChild(instance); stage.addChild(container); createjs.Ticker.setFPS(5); createjs.Ticker.addEventListener("tick",stage); stage.update();document.getElementById('goStraight').onclick = function goStraight() {instance.gotoAndPlay("run1"); } document.getElementById('goLeft').onclick = function goLeft() {instance.gotoAndPlay("run2"); } document.getElementById('goRight').onclick = function goRight() {instance.gotoAndPlay("run3"); } document.getElementById('goBack').onclick = function goBack() {instance.gotoAndPlay("run4"); }
效果就出来了(源码见 easeljs-sprite-02.html):
4.使用 Text 创建简单的文本
这个就比较简单了,直接看代码:
<canvas id="View" width="300" height="80"></canvas> <script>var stage = new createjs.Stage("View");var theText = new createjs.Text("Hello,EaselJS!","normal 32px microsoft yahei","#222222");stage.addChild(theText);stage.update(); </script>
这里有设置背景色为粉红:
#View { background-color: #fddfdf;}
显示效果为:
5.使用 Container 创建保存其他显示对象的容器
其实这个在前面已经用过了。不过还是单独写个例子,这个比较简单:
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>使用 Container 创建保存其他显示对象的容器</title><script src="js/base/easeljs-0.8.2.min.js"></script> </head> <body> <canvas id="view" width="300" height="300"></canvas> <script>var stage = new createjs.Stage("view");container = new createjs.Container();//先来绘制个正方形var square = new createjs.Shape();square.graphics.beginFill("#ff0000").drawRect(0,0,300,300);container.addChild(square);//先来绘制个正方形var square2 = new createjs.Shape();square2.graphics.beginFill("orange").drawRect(50,50,200,200);container.addChild(square2);//然后我们来绘制个圆形var circle = new createjs.Shape();circle.graphics.beginFill("blue").drawCircle(150,150,100);container.addChild(circle);//最后我们再绘制个圆形var circle2 = new createjs.Shape();circle2.graphics.beginFill("white").drawCircle(150,150,50);container.addChild(circle2);stage.addChild(container);stage.update(); </script> </body> </html>
效果如下:
相关源码地址:Demo4CreateJS
Html5游戏框架createJS组件--EaselJS相关推荐
- Html5游戏框架createJs组件--EaselJS(二)绘图类graphics
有端友问我是否有文档,有确实有,但没有中文的,只有英文的,先提供浏览地址供大家参考学习createJs英文文档. EaselJS其实主要就是creat ...
- 【CSON原创】HTML5游戏框架cnGameJS开发实录(外部输入模块篇)
返回目录 1.为什么我们需要外部输入模块? 在游戏中我们常常用到类似这样的操作:鼠标点击某位置,玩家对象移动到该位置,或者按鼠标方向键,玩家向不同方向移动,等等.这些操作无一不用与外部输入设备打交道. ...
- 【CSON原创】HTML5游戏框架cnGameJS开发实录(精灵对象篇)
返回目录 1.什么是精灵对象(sprite)? 所谓的精灵对象,就是游戏中的一个具有行为的元素,以超级玛丽为例,玛丽,敌人都算是一个精灵对象.在cnGameJS框架中,精灵对象如下几个特点: 1.添加 ...
- html 游戏 精灵,HTML5游戏框架cnGameJS开发实录-精灵对象篇
返回目录 1.什么是精灵对象(sprite)? 所谓的精灵对象,就是游戏中的一个具有行为的元素,以超级玛丽为例,玛丽,敌人都算是一个精灵对象.在cnGameJS框架中,精灵对象如下几个特点: 1.添加 ...
- 如何使用Createjs来编写HTML5游戏(一)EaselJS简介
CreateJS CreateJS 是一套可以构建丰富交互体验的 HTML5 游戏的开源工具包,旨在降低 HTML5 项目的开发难度和成本,让开发者以熟悉的方式打造更具现代感的网络交互体验. C ...
- 【CSON原创】HTML5游戏框架cnGameJS开发实录
cnGameJS是本人开发的一个基于HTML5的游戏框架,包括资源加载,碰撞检测,动画等模块.本系列文章主要介绍各个模块的开发流程,以及附上两个使用该框架进行开发的游戏demo. 目录: 1.核心函数 ...
- Phaser开源2d引擎 javascript/html5游戏框架
功能特点(Features) 易维护代码(Easy Asset Loading) Phaser可以加载图片,音频文件,数据文件,文本文件和自动解析精灵图和纹理地图集数据(出口纹理封隔器或Flash C ...
- Phaser开源2d引擎 html5游戏框架中文简介
功能特点(Features) 易维护代码(Easy Asset Loading) Phaser可以加载图片,音频文件,数据文件,文本文件和自动解析精灵图和纹理地图集数据(出口纹理封隔器或Flash C ...
- 是寒冬还是风口?2015年HTML5游戏完整产业链报告
策划/采访:尚言 编辑:徐乙榛 文案:李菁 制图:华丽胖子 目录 一.HTML5游戏产业链之研发篇 1-1 开发成本 1-2 开发瓶颈 二.HTML5游戏产业链之渠道篇 2-1 渠道商业模式 2-2 ...
最新文章
- Android专题-常用第三方框架
- 使用dom4j解析XML例子
- 如何降低QPS(错峰、限流、削峰)
- 【文文殿下】数论一些经典结论
- mysql大量数据分页优化_mysql大量数据分页优化
- 为什么要那么大的房子和那么大的储存空间呢?
- mean项目的分模块开发
- React学习手记4-组件分类(受控组件和非受控组件)
- EIGRP负载均衡实验(如有疑问,请留言)
- wireshark抓包分析 --https
- OPPO以技术推动产品 获专利数首次挺近前十
- 华为Java开发编程最新军规,谁违反谁滚蛋!
- 【代码笔记】iOS-手机系统版本
- visio如何改变折线箭头拐弯方向
- 高级设计总监的设计方法论——5W1H需求分析法 KANO模型分析法
- 《我奋斗了18年才和你坐在一起喝咖啡》,而我奋斗了18年,不是为了和你一起喝咖啡(转载)...
- vs助手使用期过 编译CEGUI的问题:error C2061: 语法错误: 标识符“__RPC__out_xcount_part” VS2010...
- Codeforces Round #612 (Div. 2) C. Garland题解
- 大学军训板报计算机学院,军训板报
- Privacy Definitions - (alpha, beta)-privacy
热门文章
- 报错解决:Failed to talk to init daemon.
- java-通过ip获取地址
- Centos7上yum安装redis
- c语言中 运算对象必须是整型数的运算符是,在C语言中,运算对象必须是整型数的运算符是...
- array用法 numpy_关于Numpy Array的使用技巧整理
- knn聚类还是分类_数据分析基本算法模型之KNN算法
- 企业生产常用的磁盘管理方式介绍
- 7、kubernetes 核心技术-Controller 控制器
- java ipfs文件存储_原来IPFS是这样存储文件的
- android+高仿视频录制,android高仿微信视频编辑页