CreateJS之入门
一、概况
1. 概念简介
CreateJS是基于HTML5开发的一套模块化的库和工具,基于这些库,可以非常快捷地开发出基于HTML5的游戏、动画和交互应用。历史可以追溯到7年前 flash 使用慢慢变少那个时代,gskinner 开发它作为“下一代”的富交互的工具库,Adobbe、微软、火狐官方资助的一个项目,API 在很多地方和 Flash 是很像,同时可以通过Adobe Animate CC(替代 flash)直接导出Canvas在Web中使用。
2. 模块组成
CreateJS 提供的 4 个模块可以帮助处理游戏开发中常见操作:
- EaselJS:用于位图、图形、Sprites、文本的绘制,还包含 Ticker 定时器
- TweenJS:用来创建补间动画效果
- PreloadJS:游戏资源的预加载和管理,包括图片、音频、json等资源
- SoundJS:播放和处理音频
3. 更好使用
目前官方版本的 createjs 不支持通过 npm 方式的使用,导致在 ES6 开发中,需要在 html 中手动引入一个 <script> 标签才可以使用,对模块化开发不方便。
<script src="https://code.createjs.com/1.0.0/createjs.min.js"></script>
createjs-npm 通过 imports-loader、exports-loader 对官方库加了一层胶水,让大家可以向使用 npm 包方式一样使用,具体为:
// 安装后和官方 createjs 1.0 使用一致 npm install createjs-npm -S // 引入全部模块 import createjs from 'createjs-npm'; // 只引入单个模块(xx 可以是 easel、preload、tween、sound) import createjs from 'createjs-npm/lib/xx';
二、官网
1.createjs首页:https://createjs.com/
首页有几个tab页,有EASEJS、TweenJS、SoundJS、PrloadJS、ZOE五种.(最新的官网好像没有ZOE的tab页了,不过在http://createjs.com/downloads下载页面的最下面还是可以找到下载的。)
- EASEJS:用来处理HTML5的canvas
- TWEENJS:用来处理HTML5的动画调整和javascript属性
- SOUNDJS:用来帮助简化处理音频相关的API
- PRELOADJS:管理和协调程序加载项的类库
- ZOE:将SWF动画导出为EaseIJS的sprite的工具
基于这些库,可以非常快捷地开发出基于HTML5的游戏、动画和交互应用。运行环境请使用Safari, Chrome, Firefox 或者 IE 9+ 。

2.下载页解析:https://createjs.com/downloads

3.帮助文档:https://createjs.com/docs
帮助文档里有很多类的介绍,还有对应类的方法、属性、事件的介绍。不过是英文版本的,暂时还没有找到比较好的中文的版本。

三、使用
1. EaselJS 的使用
EaselJS 在 Createjs 中承担 画 的能力,比如说你要画图片、画图形、画帧动画、画文字可以使用它的 API 实现。
步骤
比如说你需要在画一个红色的圆,必含步骤为创建舞台->创建对象->设置对象属性->添加对象到舞台->更新舞台呈现下一帧:
//创建一个舞台,得到一个参考的画布 const stage = new createjs.Stage("myCanvas"); //创建一个形状的显示对象 const circle = new createjs.Shape(); circle.graphics.beginFill("red").drawCircle(0, 0, 40); //形状实例的设置位置 circle.x = circle.y = 50; //添加形状实例到舞台显示列表 stage.addChild(circle); //更新舞台将呈现下一帧 stage.update();
上述代码的效果为:
👀 Graphics 类:
在上面Demo中,我们创建了一个 Shape,这里其实是创建了一块画布,同时假如需要在画布上面画东西,就需要使用Graphics类了。可以在 Graphics 上面设置很多样式,或者调用绘图方法来画其他的图形,同时Graphics类里的所有绘图方法都会返回一个graphics实例,这里使用链式操作会很方便。
EaselJS 元素
上面说过,EaselJS 可以用来画图片、图形、动画帧、文字这类型的元素,对应是 Bitmap、Shape、Sprite、Text 这几个。具体使用为:
// 使用 Bitmap 来表示图片 const bitmap = new createjs.Bitmap("imagePath.jpg"); // 使用 Shape 结合 Graphics 来表示图形 const shape = new createjs.Shape(); shape.graphics.beginFill("#ff0000").drawRect(0, 0, 100, 100); // 使用 Sprite 来表示精灵动画(后面详细介绍) const instance = new createjs.Sprite(spriteSheet); instance.gotoAndStop("frameName"); // 使用 Text 来表示文字 const text = new createjs.Text("How are you", "20px Arial", "#000000");
Sprite(精灵动画)
这个特性会让第一次接触的同学高兴起来,很方便使用,同时实现效果很棒,比如说需要实现一个绅士走路的样子:

其中 spriteSheet 逻辑如下:
const spriteSheet = new createjs.SpriteSheet({ images: ["https://img.alicdn.com/tfs/TB1vMy8EeuSBuNjy1XcXXcYjFXa-2048-512.png"], frames: { height: 256, width: 128, regX: 0, regY: 0, count: 26 }, animations: { walk: [0, 25], }, }); const sprite = new createjs.Sprite(spriteSheet); sprite.gotoAndPlay("walk");
2. TweenJS 的使用
从上面可以看到,EaselJS 其实可以处理 CreateJS 开发中很多的事情,其他三项可以当做辅助工具,让开发更便捷。
TweenJS 在这里充当着“动”的能力,同时它也可以单独使用,支持数字对象属性和CSS样式属性,是一个很强大的补间动画功能库。
案例
比如说以下这个很经典的动画例子:

其中 Tween 的逻辑为:
createjs.Tween.get(circle, { loop: true}) .wait(300) .to({ x: canvas.width - circle.r*2},speed,createjs.Ease.circOut) .to({ y: canvas.height - circle.r*2},speed,createjs.Ease.circOut) .to({ x: 0},speed,createjs.Ease.circOut) .to({ y: 0},speed,createjs.Ease.circOut) .call(()=>{console.log('handleComplete')});
3. PreloadJS 的使用
PreloadJS是一个用来管理和协调相关资源加载的类库,它可以方便的帮助你预先加载相关资源。
它主要是使用 LoadQueue 类来管理加载内容的,在游戏中很常见的场景是预加载图片资源和游戏音乐。
案例
屏幕中可以看到处理后的图片加载出来,同时在播放着背景音乐:
其中预加载逻辑如下:
const canvas = document.getElementById("canvas"); const stage = new createjs.Stage(canvas); const queue = new createjs.LoadQueue(false); queue.installPlugin(createjs.Sound); createjs.Sound.alternateExtensions = ["mp3"]; queue.loadManifest([ { id: "bgImg", src: "//img.alicdn.com/tfs/TB1EENFADtYBeNjy1XdXXXXyVXa-528-691.png" }, { id: "bgMusic", src: "//gw.alipayobjects.com/os/rmsportal/YwASPsDMOPusAzZVdLuS.mp3" } ]); queue.on("complete", handleComplete, this); function handleComplete() { const bg = new createjs.Bitmap(queue.getResult("bgImg")); stage.addChild(bg); stage.update(); createjs.Sound.play("bgMusic"); }
4. SoundJS 的使用
一个小游戏要想互动性比较好,背景音乐是必不可少少的,可以选择一些轻松活泼的,需要使用SoundJS来“放音乐”,同时具备完善的兼容处理。
Sound 类
音频管理主要使用 Sound 类,有如下功能:
- Sound.registerSound:注册播放的音频,registerSounds 支持多个音频,同时在音频播放前的需要提前注册(此处的加载其实也可用preload弄)
- Sound.registerPlugins:注册音频播放插件,一般用于不兼容的低浏览器场景,可以注册来兼容 WebAudioPlugin 或者 HTMLAudioPlugin
- Sound.play: 播放音频,一般是
createjs.Sound.play(id)
AbstractSoundInstance 播放实例类
当我们调用 Sound.play API时候其实就创建了一个AbstractSoundInstance 类,创建好后,我们可以通过它来直接控制音频的播放或者其他操作,同时可以监听其播放状态:
const myInstance = createjs.Sound.play("myAssetPath/mySrcFile.mp3"); // 属性控制,实际中选择需要的属性设置就好 // 属性同时以对象方式可以加到play第二个参数 myInstance.volume = 0.5; myInstance.paused = false; // 控制音乐暂停否 myInstance.loop = true; // 循环播放 myInstance.duration = 30; //播放时长 // 监听状态,常用于错误时候,重新播放 myInstance.on("complete", handleComplete); myInstance.on("loop", handleLoop); myInstance.on("failed", handleFailed);
四、总结
CreateJS 的特性应该不止上述这些,更多的需要在实际项目中使用,通过各种游戏场景可以发掘很多有趣的使用。
浙公网安备 33010602011771号