了解 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例子

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. <script src="./preloadjs/PreloadJS-master/lib/preloadjs.js"></script>
  7. </head>
  8. <body>
  9. <div>
  10. <img class="img" id="ball" />
  11. <img class="img" id="core" />
  12. </div>
  13. <script>
  14. var preload = new createjs.LoadQueue(false, "images/")
  15. console.log(preload)
  16. var plugin = {
  17. getPreloadHandlers: function(){
  18. console.log("AAA")
  19. return {
  20. types: ["image"],
  21. callback: function(loadItem) {
  22. const {src} = loadItem;
  23. console.log(src);
  24. var id = src.toLowerCase().split("/").pop().split(".")[0];
  25. var img = document.getElementById(id);
  26. loadItem.tag = img;
  27. }
  28. }
  29. }
  30. }
  31. preload.installPlugin(plugin);
  32. preload.loadManifest([
  33. "ball.png",
  34. "core.png"
  35. ])
  36. </script>
  37. </body>
  38. </html>

Easeljs 添加一个图片到画布中

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. <script src="./easeljs/EaselJS-master/lib/easeljs.js"></script>
  7. <script src="./tweenjs/TweenJS-master/lib/tweenjs.js"></script>
  8. <script src="./preloadjs/PreloadJS-master/lib/preloadjs.js"></script>
  9. </head>
  10. <body>
  11. <canvas id="root-canvas" style="background-color: #ccc" width="360px" height="200px">
  12. 您的浏览器不支持canvas
  13. </canvas>
  14. <script>
  15. var stage = new createjs.Stage("root-canvas");
  16. var image = new createjs.Bitmap("./images/ball.png");
  17. stage.addChild(image);
  18. createjs.Ticker.addEventListener("tick", handleTick);
  19. function handleTick(event) {
  20. image.x += 10;
  21. if (image.x > stage.canvas.width) {
  22. image.x = 0;
  23. }
  24. stage.update();
  25. }
  26. </script>
  27. </body>
  28. </html>

Easeljs 添加一个容器

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. <script src="./easeljs/EaselJS-master/lib/easeljs.js"></script>
  7. <script src="./tweenjs/TweenJS-master/lib/tweenjs.js"></script>
  8. <script src="./preloadjs/PreloadJS-master/lib/preloadjs.js"></script>
  9. </head>
  10. <body>
  11. <canvas id="root-canvas" style="background-color: #ccc" width="360px" height="200px">
  12. 您的浏览器不支持canvas
  13. </canvas>
  14. <script>
  15. var stage = new createjs.Stage("root-canvas");
  16. var gameView = new createjs.Container();
  17. var image = new createjs.Bitmap("./images/ball.png");
  18. stage.addChild(gameView);
  19. gameView.addChild(image);
  20. gameView.x = 10;
  21. gameView.y = 10;
  22. stage.x = -10;
  23. stage.y = -10;
  24. createjs.Ticker.addEventListener("tick", handleTick);
  25. function handleTick(event) {
  26. image.x += 10;
  27. if (image.x > stage.canvas.width) {
  28. image.x = 0;
  29. }
  30. stage.update();
  31. }
  32. </script>
  33. </body>
  34. </html>

例子

要开始使用绘画,创建一个舞台,把画布元素, 并添加 DisplayObject 实例作为子元素。easeljs支持以下类:

所有显示对象都可以添加到舞台里,或直接绘制到画布上。
用户交互
在舞台上的所有显示对象(除domelement)调用事件时,使用鼠标或触摸事件。easeljs支持悬停,按下和释放事件。以及一个易于使用的拖放和拖放模式 MouseEvent 查看更多信息事件。

npm i —save createjs

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>Document</title>
  6. <script src="./easeljs/EaselJS-master/lib/easeljs.js"></script>
  7. <script src="./tweenjs/TweenJS-master/lib/tweenjs.js"></script>
  8. </head>
  9. <body>
  10. <canvas id="root-canvas" style="background-color: #ccc" width="360px" height="200px">
  11. 您的浏览器不支持canvas
  12. </canvas>
  13. <script src="./index.js"></script>
  14. </body>
  15. </html>
  1. //创建一个舞台,得到一个参考的画布
  2. stage = new createjs.Stage("root-canvas");
  3. // 创建一个形状的显示对象
  4. circle = new createjs.Shape();
  5. circle.graphics.beginFill("DeepSkyBlue").drawCircle(0, 0, 50);
  6. //形状实例的设置位置
  7. circle.x = circle.y = 50;
  8. //添加形状实例到舞台显示列表
  9. stage.addChild(circle);
  10. //更新舞台将呈现下一帧
  11. stage.update();
  12. stage.x = 10;
  13. stage.y = 10;
  14. // 创建一个文本
  15. var text = new createjs.Text("Hello easeljs", "36px Arial", "blue")
  16. stage.addChild(text);
  17. stage.update();
  18. text.text = "666 Hello easeljs";
  19. stage.update();
  20. circle.addEventListener("click", handleClick);
  21. circle.addEventListener("mousedown", mouseDown);
  22. circle.addEventListener("mousemove", handleMove); // 放在这里不生效
  23. function handleClick(event){
  24. console.log('stage click', event)
  25. }
  26. function mouseDown(event) {
  27. console.log('stage mousedown', event)
  28. }
  29. function handleMove(event) {
  30. onsole.log('stage mousemove', event)
  31. }
  32. createjs.Tween.get(circle, {loop: true})
  33. .wait(1000) // 等待一秒
  34. .to({
  35. scaleX: 0.2, scaleY: 0.2
  36. })
  37. .wait(1000)
  38. .to({
  39. scaleX: 1, scaleY: 1
  40. }, 1000, createjs.Ease.bounceInOut)
  41. createjs.Ticker.setFPS(24);
  42. createjs.Ticker.addEventListener("tick", stage);
  43. createjs.Ticker.addEventListener("tick", handleTick);
  44. function handleTick() {
  45. //圆圈向右边移动10个单位。
  46. circle.x += 10;
  47. //将导致圈转回到开始位置
  48. if (circle.x > stage.canvas.width) { circle.x = 0; }
  49. stage.update();
  50. }

注意事项

  1. 新手写createjs时容易遇到的坑(持续更新)
  2. 新手写createjs一定会遇到很多的坑,下面我来讲下常见的坑和解决方法,大家可以经常来看看这篇文章,本人会持续更新!
  3. 1.按钮的alpha值不能为0(其中一部分透明也不行):
  4. 在做fla的时候很多人会弄一个alpha值为0的按钮放在图片上代替图片按钮点击,以减少项目的大小。但是在createjs中所有对象 alpha0时都不受任何鼠标事件影响。不过解决起来也非常容易,alpha设为%10.01)就可以了(设置hitArea也可以,纯代码项目会方便)。
  5. (注:为什么一部分透明也不可以?因为createjs的点击是根据像素判断的,如果点击的时候刚好点到这部分透明的位置,就会不触发点击)
  6. 2.项目中有使用引导层 必须在初始化中写上createjs.MotionGuidePlugin.install();
  7. 这个就不用多说了 如果项目中的动画有用到引导层 初始化的时候加上这句话就可以了。
  8. 3.项目中使用音乐时 必须在加载时写上loader.installPlugin(createjs.Sound);
  9. 这个也不多解释同上。
  10. 4.用到mouseOver事件的时候需要加一句stage.enableMouseOver();要让移动端支持createjs的点击等鼠标事件时需要加上createjs.Touch.enable(stage);