了解 createjs
一款HTML5游戏开发的引擎
createjs是一套可以构建丰富交互体验的HTML5游戏的开源工具包,旨在降低HTML5项目的开发难度和成本,让开发者以熟悉的方式打造更具现代感的网络交互体验。
Createjs中包含四款工具
EaseIjs:用来处理HTML5的Canvas https://github.com/CreateJS/EaselJS
TweenJS:用来处理HTML5动画调整和javascript属性 https://github.com/CreateJS/TweenJS
SoundJS:用来帮助简化处理音频相关API https://github.com/CreateJS/SoundJS
PreloadJS:管理和协调程序加载项的类库 https://github.com/CreateJS/PreloadJS
Preloadjs例子
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><script src="./preloadjs/PreloadJS-master/lib/preloadjs.js"></script></head><body><div><img class="img" id="ball" /><img class="img" id="core" /></div><script>var preload = new createjs.LoadQueue(false, "images/")console.log(preload)var plugin = {getPreloadHandlers: function(){console.log("AAA")return {types: ["image"],callback: function(loadItem) {const {src} = loadItem;console.log(src);var id = src.toLowerCase().split("/").pop().split(".")[0];var img = document.getElementById(id);loadItem.tag = img;}}}}preload.installPlugin(plugin);preload.loadManifest(["ball.png","core.png"])</script></body></html>
Easeljs 添加一个图片到画布中
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><script src="./easeljs/EaselJS-master/lib/easeljs.js"></script><script src="./tweenjs/TweenJS-master/lib/tweenjs.js"></script><script src="./preloadjs/PreloadJS-master/lib/preloadjs.js"></script></head><body><canvas id="root-canvas" style="background-color: #ccc" width="360px" height="200px">您的浏览器不支持canvas</canvas><script>var stage = new createjs.Stage("root-canvas");var image = new createjs.Bitmap("./images/ball.png");stage.addChild(image);createjs.Ticker.addEventListener("tick", handleTick);function handleTick(event) {image.x += 10;if (image.x > stage.canvas.width) {image.x = 0;}stage.update();}</script></body></html>
Easeljs 添加一个容器
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><script src="./easeljs/EaselJS-master/lib/easeljs.js"></script><script src="./tweenjs/TweenJS-master/lib/tweenjs.js"></script><script src="./preloadjs/PreloadJS-master/lib/preloadjs.js"></script></head><body><canvas id="root-canvas" style="background-color: #ccc" width="360px" height="200px">您的浏览器不支持canvas</canvas><script>var stage = new createjs.Stage("root-canvas");var gameView = new createjs.Container();var image = new createjs.Bitmap("./images/ball.png");stage.addChild(gameView);gameView.addChild(image);gameView.x = 10;gameView.y = 10;stage.x = -10;stage.y = -10;createjs.Ticker.addEventListener("tick", handleTick);function handleTick(event) {image.x += 10;if (image.x > stage.canvas.width) {image.x = 0;}stage.update();}</script></body></html>
例子
要开始使用绘画,创建一个舞台,把画布元素, 并添加 DisplayObject 实例作为子元素。easeljs支持以下类:
- 使用位图的图像 Bitmap
- 使用图形 Shape 和图形的矢量图形 Graphics
- 使用雪碧图SpriteSheet和雪碧的位图动画 Sprite
- 实例使用简单文本 Text
- 容器持有其他displayobjects使用容器 Container
- 控制HTML DOM元素的使用 DOMElement
所有显示对象都可以添加到舞台里,或直接绘制到画布上。
用户交互
在舞台上的所有显示对象(除domelement)调用事件时,使用鼠标或触摸事件。easeljs支持悬停,按下和释放事件。以及一个易于使用的拖放和拖放模式 MouseEvent 查看更多信息事件。
npm i —save createjs
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Document</title><script src="./easeljs/EaselJS-master/lib/easeljs.js"></script><script src="./tweenjs/TweenJS-master/lib/tweenjs.js"></script></head><body><canvas id="root-canvas" style="background-color: #ccc" width="360px" height="200px">您的浏览器不支持canvas</canvas><script src="./index.js"></script></body></html>
//创建一个舞台,得到一个参考的画布stage = new createjs.Stage("root-canvas");// 创建一个形状的显示对象circle = new createjs.Shape();circle.graphics.beginFill("DeepSkyBlue").drawCircle(0, 0, 50);//形状实例的设置位置circle.x = circle.y = 50;//添加形状实例到舞台显示列表stage.addChild(circle);//更新舞台将呈现下一帧stage.update();stage.x = 10;stage.y = 10;// 创建一个文本var text = new createjs.Text("Hello easeljs", "36px Arial", "blue")stage.addChild(text);stage.update();text.text = "666 Hello easeljs";stage.update();circle.addEventListener("click", handleClick);circle.addEventListener("mousedown", mouseDown);circle.addEventListener("mousemove", handleMove); // 放在这里不生效function handleClick(event){console.log('stage click', event)}function mouseDown(event) {console.log('stage mousedown', event)}function handleMove(event) {onsole.log('stage mousemove', event)}createjs.Tween.get(circle, {loop: true}).wait(1000) // 等待一秒.to({scaleX: 0.2, scaleY: 0.2}).wait(1000).to({scaleX: 1, scaleY: 1}, 1000, createjs.Ease.bounceInOut)createjs.Ticker.setFPS(24);createjs.Ticker.addEventListener("tick", stage);createjs.Ticker.addEventListener("tick", handleTick);function handleTick() {//圆圈向右边移动10个单位。circle.x += 10;//将导致圈转回到开始位置if (circle.x > stage.canvas.width) { circle.x = 0; }stage.update();}
注意事项
新手写createjs时容易遇到的坑(持续更新)新手写createjs一定会遇到很多的坑,下面我来讲下常见的坑和解决方法,大家可以经常来看看这篇文章,本人会持续更新!1.按钮的alpha值不能为0(其中一部分透明也不行):在做fla的时候很多人会弄一个alpha值为0的按钮放在图片上代替图片按钮点击,以减少项目的大小。但是在createjs中所有对象 alpha为0时都不受任何鼠标事件影响。不过解决起来也非常容易,alpha设为%1(0.01)就可以了(设置hitArea也可以,纯代码项目会方便)。(注:为什么一部分透明也不可以?因为createjs的点击是根据像素判断的,如果点击的时候刚好点到这部分透明的位置,就会不触发点击)2.项目中有使用引导层 必须在初始化中写上createjs.MotionGuidePlugin.install();这个就不用多说了 如果项目中的动画有用到引导层 初始化的时候加上这句话就可以了。3.项目中使用音乐时 必须在加载时写上loader.installPlugin(createjs.Sound);这个也不多解释同上。4.用到mouseOver事件的时候需要加一句stage.enableMouseOver();要让移动端支持createjs的点击等鼠标事件时需要加上createjs.Touch.enable(stage);
