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 创建图像
* 使用 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 。
和上面一样,我们需要添加对 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 more
console.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 back
if(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其实主要就是createJ ...
- Html5游戏框架createJs组件--EaselJS(一)
现在html5小游戏越来越火爆了,由于公司业务的需要,也开发过几款微信小游戏,用canvas写的没有利用什么框架,发现性能一直不怎么好,所以楼主就只能硬着头皮去学习比较火的Adobe公司出的Creat ...
- Html5游戏框架createJs的简单用法
声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢!http://www.it165.net/pro/html/201403/11105.html 楼主记忆力不好,最近刚好用了一下create ...
- 主流HTML5游戏框架的分析和对比
本文主要选取了Construct2.ImactJS.LimeJS.GameMaker.CreateJS.lycheeJS.Crafty.three.js.melonJS.Turbulenz.Quint ...
- Phaser开源2d引擎 javascript/html5游戏框架
功能特点(Features) 易维护代码(Easy Asset Loading) Phaser可以加载图片,音频文件,数据文件,文本文件和自动解析精灵图和纹理地图集数据(出口纹理封隔器或Flash C ...
- Phaser开源2d引擎 html5游戏框架中文简介
功能特点(Features) 易维护代码(Easy Asset Loading) Phaser可以加载图片,音频文件,数据文件,文本文件和自动解析精灵图和纹理地图集数据(出口纹理封隔器或Flash C ...
- 用Phaser来制作一个html5游戏——flappy bird (一)
Phaser是一个简单易用且功能强大的html5游戏框架,利用它可以很轻松的开发出一个html5游戏.在这篇文章中我就教大家如何用Phaser来制作一个前段时间很火爆的游戏:Flappy Bird,希 ...
- HTML5游戏引擎深度测评
https://zhuanlan.zhihu.com/p/20768495 最近看到网上一篇文章,标题叫做<2016年 最火的 15 款 HTML5 游戏引擎>.目前针对HTML5游戏的解 ...
- 用Phaser来制作一个html5游戏——flappy bird (二)
在上一篇教程中我们完成了boot.preload.menu这三个state的制作,下面我们就要进入本游戏最核心的一个state的制作了.play这个state的代码比较多,我不会一一进行说明,只会把一 ...
随机推荐
- PHP抽象类
<?php /* * abstract * 抽象类: * 1.至少有一个抽象方法(没有具体实现的方法) * 2.不能被实例化,可以被继承 * 3.抽象类可以有子抽象类 * 相对于接口: * 1. ...
- python+selenium一:对浏览器的操作
# 1.打开Firefox浏览器from selenium import webdriverdriver = webdriver.Firefox()driver.get("https://w ...
- MySQL5.6 GTID Replication
MySQL 5.6 的新特性之一,是加入了全局事务 ID (Global Transaction ID) 来强化数据库的主备一致性,故障恢复,以及容错能力.官方文档:http://dev.mysql. ...
- python 全栈开发,Day108(客户管理之权限控制,客户管理之动态"一级"菜单,其他应用使用rbac组件,django static文件的引入方式)
一.客户管理之权限控制 昨天的作业,有很多不完善的地方 下载代码,基本实现权限验证 https://github.com/987334176/luffy_permission/archive/v1.2 ...
- CenOS下安装 Git,Git的初始设置,添加文件,提交文件
一.配置DNS 1,配置DNSvi /etc/resolv.conf加入: 代码如下: nameserver 192.168.0.1 nameserver 8.8.8.8 nameserver 8.8 ...
- centos java tomcat 中文乱码解决办法
现象: cenos 部署java web 程序 ,java类中有中文 出现乱码现象 即使使用: System.getProperty("中文") 控制台都出现 ?????? 乱 ...
- [转] HTML5利用WebRTC的getUserMedia获取摄像头信息模拟拍照及视频(完整示例)
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <t ...
- CDH搭建Hadoop集群(Centos7)
一.说明 节点(CentOS7.5) Server || Agent CPU node11 Server || Agent 4G node12 Agent 2G node13 Agent 2G 二 ...
- 决策树分类算法及python代码实现案例
决策树分类算法 1.概述 决策树(decision tree)——是一种被广泛使用的分类算法. 相比贝叶斯算法,决策树的优势在于构造过程不需要任何领域知识或参数设置 在实际应用中,对于探测式的知识发现 ...
- java技术第二次作业
(一)学习总结 1.什么是构造方法?什么是构造方法的重载? 构造方法是用于对对象初始化的方法,当新对象被创建的时候,构造函数会被调用. 每一个类都有构造函数.在程序员没有给类提供构造函数的情况下,Ja ...