前面曾经记录过Canvas的基础知识《让自己也能使用Canvas》,在实际使用中,用封装好的库效率会高点。

使用成熟的库还能对基础知识有更深入的理解,CreateJS是基于HTML5开发的一套模块化的库和工具,有4个模块,github地址在这里

最近看到有个中文网,很多API都翻译了出来,不过就是翻译的比较生硬。

我参考了国外写的一本书《HTML5.Games.with.CreateJS》,再根据自己的一些理解整理了一下这个库的使用。

下面所有的demo代码都可以在这里查看到

一、Stage

Stage(舞台)就是展现图形、执行动画的地方,必须先创建Stage,然后才能做后续操作。

有两种方式的初始化:

  1. stage = new createjs.Stage(document.getElementById('canvas'));
  2. stage = new createjs.Stage('canvas');//直接使用canvas的ID

接下来就是添加图形等布置操作,等到你布置好舞台后,就需要调用“update”方法,展示新的舞台内容。

  1. stage.update();

二、Ticker

Ticker类是一个定时器,主要就是定时刷新舞台,理想的帧速率是60FPS,在这个类中也可以手动的修改这个速度。

  1. var stage;
  2. function init() {
  3. stage = new createjs.Stage('canvas');//直接使用canvas的ID
  4. createjs.Ticker.addEventListener("tick", runGame);
  5. createjs.Ticker.setFPS(60);
  6. }
  7. function runGame(e) {
  8. stage.update();
  9. }

如果想控制“runGame”中的刷新,可以设置暂停。

“setPaused”方法可以修改“e”中的“paused”属性。

  1. createjs.Ticker.setPaused(true);
  2. function runGame(e) {
  3. if(!e.paused)
  4. stage.update();
  5. }

三、Graphics

1)初始化方式

接下来可以画一些图出来,Graphics类可以画矢量图(vector)或位图(bitmap)。

  1. var g = new createjs.Graphics();
  2. g.beginStroke('#000');
  3. g.beginFill('#FF6600');
  4. g.drawRect(0,0,100,100);

也可以链式的写法。

  1. var g = new createjs.Graphics().beginStroke('#000').beginFill('#FF6600').drawRect(0,0,100,100);

Graphics类仅仅提供了画图,但并不会显示,如果要显示,就需要“Shape”类的帮忙。

2)简写

Graphics类中的画图方法还有简写:

四、Shape

1)制作图形

一旦你创建了一个Graphics类,你就需要Shape类,下面的代码接上面的“g”。

  1. var square = new createjs.Shape(g);
  2. square.x = square.y = 100;
  3. stage.addChild(square);

除了正方形,还可以有三角形、圆、多边形等,详细的代码可以在这里看到

2)简单的动画

使用动画就会引入TweenJS模块,将会用到上面画正方形的Graphics代码,多了下面两句代码。

  1. //绕着图形中心滚动
  2. square.regX = square.regY = 50;//设置图形的X和Y轴位移
  3. createjs.Tween.get(square).to({
  4. rotation: 360
  5. }, 3000);

五、一个UI元素demo

接下来制作一个常见的加载条,当年上传、打开某个程序或做其它操作经常能看到,详细代码可以在这里查看到

1)制作过程

先设置舞台,再创建创建加载条,最后用定时器累加加载条长度,其实也可以直接在Ticker事件中累加长度,只是速度会快一点。

  1. function init() {
  2. setupStage();//设置舞台
  3. buildLoaderBar();//创建加载条
  4. startLoad();//用定时器累加加载条长度
  5. }

用链式写法来写更新长度的那段代码,“updateLoaderBar”是在“startLoad”函数中的。

  1. function updateLoaderBar() {
  2. loaderBar.graphics.beginFill('#00ff00').drawRect(0, 0, LOADER_WIDTH * percentLoaded, 40).endFill();
  3. loaderBar.graphics.setStrokeStyle(2).beginStroke("#000").drawRect(0, 0, LOADER_WIDTH, 40).endStroke();
  4. }

先是画里面的蓝色,再画边框。

beginFillendFill组合使用了一下,endFill是指重新开始画,使得后面的设置不会影响当前的。

如果我去掉endFill,将会直接显示完整的绿色,因为后面的“drawRect(0, 0, LOADER_WIDTH, 40)”,又设置了一遍宽度。

beginStrokeendStroke组合使用,目的和上面的差不多。

如果把“endStroke”去掉,就会发现多了根右边框,之所以会多是前面的“drawRect”影响了展示。

2)一点小改造

后面再观察一下发现,其实可以不用每次来画边框,边框可以在“buildLoaderBar”函数中定义。

  1. function buildLoaderBar() {
  2. loaderBar = new createjs.Shape();
  3. loaderBar.x = loaderBar.y = 100;
  4. loaderBar.graphics.setStrokeStyle(2).beginStroke("#000").drawRect(0, 0, LOADER_WIDTH, 40).endStroke();
  5. stage.addChild(loaderBar);
  6. }

相应的“updateLoaderBar”函数也要做些修改,drawRect中的X、Y坐标要修改下,宽度也要改变下。

本来以为设置了边宽为2,那么也要偏移2,但其实不是,只需要偏移1就行了。

  1. function updateLoaderBar() {
  2. loaderBar.graphics.beginFill('#00ff00').drawRect(1, 1, LOADER_WIDTH * percentLoaded - 2, 38).endFill();
  3. }

如果我把边框的宽度改成4,偏移和宽度又要重新计算了,怪不得写在里面,就方便多了。

制作动画或小游戏——CreateJS基础类(一)的更多相关文章

  1. 制作动画或小游戏——CreateJS事件(二)

    在Canvas中如果要添加事件,就需要计算坐标来模拟各种事件,而EaselJS中已经封装好了多个事件,只需调用即可. 一.事件 1)点击 事件是绑定在Shape类中的,click事件与DOM中的意思是 ...

  2. [SpriteKit] 制作瓦片地图小游戏

    概述 SpriteKit制作瓦片地图游戏,深入了解2D游戏制作过程 详细 代码下载:http://www.demodashi.com/demo/10703.html 说实话这个2D游戏实战的入门看的我 ...

  3. 制作一个 JavaScript 小游戏

    简评: 作者学习了编程两个月,边学边做了一个 JavaScript 小游戏,在文中总结了自己在这个过程中的一些体会,希望能给其他初学者一些帮助. 对于很多想学编程但一直没下定决心的同学来说,最大的问题 ...

  4. 用C#制作推箱子小游戏

    思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图  (12行×13列) 地图可以看做是行和列组成的,即可以看做 ...

  5. 原生JS制作贪吃蛇小游戏

    感情都在代码里,来,干了!... <!doctype html> <html> <head> <meta http-equiv="Content-T ...

  6. 用cocos2d 2.1制作一个过河小游戏(4): 游戏主逻辑BaseLayer设计

    前段时间一直在忙.没有时间更新博客.今天还是抽点时间把最后一小部分游戏的实现放上来吧. BaseLayer.h: #import <GameKit/GameKit.h> #import & ...

  7. Python制作塔防小游戏

    开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块.

  8. 利用python 5分钟制作一款小游戏

    1.安装pygame 在命令行cmd中输入:pip install pygame ( 注:如果安装不成功,需要输入:python -m pip install --user --upgrade pip ...

  9. .NET手撸2048小游戏

    .NET手撸2048小游戏 2048是一款益智小游戏,得益于其规则简单,又和2的倍数有关,因此广为人知,特别是广受程序员的喜爱. 本文将再次使用我自制的"准游戏引擎"FlysEng ...

随机推荐

  1. Python之路【第六篇】python基础 之面向对象(一)

    一.三大编程范式 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 2.从上述的指令中提取重复的代码块或逻辑,组织到一起(比 ...

  2. Java 集合类的特性

    ArrayList: 元素单个,效率高,多用于查询  Vector: 元素单个,线程安全,多用于查询 LinkedList: 元素单个,多用于插入和删除  HashMap: 元素成对,元素可为空  H ...

  3. Python之路Day12--mysql介绍及操作

    上节回顾: 1. RabbitMQ a. 平均分发 b. perfetch = 1 c. durable 队列持久化  deliver_mode = 2 消息持久化 d. 1对多广播  exchang ...

  4. 利用http缓存数据

    通过一个简单的ajax请求来详解http的缓存技术 register.html <!DOCTYPE> <html> <head> <title>http ...

  5. java 解析并生成 XML

    在 java 中使用 Dom4j 解析 XML 对 XML 文件的解析,通常使用的是 Dom4j 和 jdom 作为XML解析工具. 在此只介绍下 Dom4j 对 XML 文件的解析使用方法. 1. ...

  6. 谷歌浏览器允许ajax跨域以非安全模式打开

    最近使用ajax的时候,因为是在本地测试调用 后台时一直会报错. 解决方案:用谷歌浏览器 以非安全的模式打开 在cmd命令行中 cd 到谷歌的安装目录下 (右键 属性 复制路径) 然后在 运行如下命令 ...

  7. 关于mysql ERROR 1045 (28000)错误的解决办法

    错误情景: 使用Navicat打开mysql的时候弹出错误框 错误代码: ERROR 1045 (28000): Access denied for user 'ODBC'@'localhost' ( ...

  8. maven内部运行原理解析

    maven至今还是Java编程语言构建的事实标准,大部分项目还在使用maven来进行构建,因此了解maven内部运行的原理对定位和分析问题还是很有裨益的.本篇文章主要介绍一些maven内部运行过程中的 ...

  9. 发布一个自用的ansi转utf8程序

    前几天网上下载了一个国外的源码示例,布署到IIS上,查看网页中文显示乱码,各种不方便,你懂的. 用记事本打开文件,显示是ANSI格式,另存为UTF8格式,保存,再查看页面就正常显示中文了. 文件好多, ...

  10. 有了lisk,为什么我们还要做一个Asch?

    0 前言 首先要声明一点,我们和我们的一些朋友都是lisk的投资人和支持者,我们也相信lisk会成功. 事实上,lisk已经成功了一半,目前在区块链领域融资金额排行第二,仅次于以太坊. 那为什么我们还 ...