制作动画或小游戏——CreateJS基础类(一)

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

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

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

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

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

一、Stage

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

有两种方式的初始化:

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

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

stage.update();

二、Ticker

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

var stage;
function init() {
  stage = new createjs.Stage(‘canvas‘);//直接使用canvas的ID
  createjs.Ticker.addEventListener("tick", runGame);
  createjs.Ticker.setFPS(60);
}
function runGame(e) {
  stage.update();
}

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

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

createjs.Ticker.setPaused(true);
function runGame(e) {
  if(!e.paused)
    stage.update();
}

三、Graphics

1)初始化方式

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

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

也可以链式的写法。

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

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

2)简写

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

四、Shape

1)制作图形

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

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

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

2)简单的动画

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

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

五、一个UI元素demo

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

1)制作过程

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

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

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

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

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

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

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

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

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

2)一点小改造

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

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

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

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

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

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

时间: 2024-10-25 07:50:50

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

使用AxureRP7.0制作经典数独小游戏原型,axure游戏原型下载

之前,有同学在Q群中提问,如何使用axure制作经典数独解谜小游戏,当时由于时间关系没有来得及亲手制作,而是给同学们提供了Axure6.5版本的一个数独解谜游戏的原型,本教程由axure原型库网站录制,转载请注明出处!但是那个原型做的太过繁杂,所以仅供大家参考交流:在此,金乌老师特地抽时间给同学们使用AxureRP7.0制作了一下,感觉对实战逻辑分析和axure变量的掌握比较有考验,所以就放出来供大家学习交流使用. 在学习的过程中,如果你仅凭自己现有的对axure的掌握,无法准确分析并组织出原型

unity3d 制作打飞机小游戏

作为刚入门小游戏,在制作过程中遇到一些问题,挑重点记录下. 第一:摇杆的制作 使用了官方的joystick类,但是官方没有提供c#版的joystick,这就导致了我不会将js脚本和c#脚本进行通信.最后解决办法是找到网络大牛翻译回来的joystick  c#版本,顺利实现摇杆.附上c#版joystick using UnityEngine; /** * File: MPJoystick.cs * Author: Chris Danielson of (monkeyprism.com) * //

利用Python制作一个连连看小游戏,边学边玩!

导语 今天我们将制作一个连连看小游戏,让我们愉快地开始吧~ 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Python自带的模块 环境搭建 安装Python并添加到环境变量,pip安装需要的相关模块即可. 先睹为快 在cmd窗口运行"Game15.py"文件即可. 效果如下: 原理简介 游戏规则: 玩家通过鼠标交换相邻的拼图,若交换后水平/竖直方向存在连续三个相同的拼图,则这些拼图消失,玩家得分,同时生成新的拼图以补充消失的部分,否则,交换失败,玩家不

用C#制作推箱子小游戏

思路分析: 一.制作一个地图 二.地图中放置墙.箱子.人.目标等 三.让小人动起来完成推箱子动作 游戏制作: 1.按照上述地图制作一个地图  (12行×13列) 地图可以看做是行和列组成的,即可以看做是由二维数组组成的 2.实体化:将0转换为空格,1转换为黑色方块 3.设置箱子.人.目标点 4.先让小人动起来,实现小人向上移动,因为坐标的交换,所以箱子向下移动了,同理,改变坐标可以实现向左.向下.向右移动 向下移动:y+1;向左移动:x-1;向右移动:x+1; 5.实现推箱子,以向上移动为例,其

js制作贪吃蛇小游戏

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> #map{ width: 800px; height: 800px; background-color: black; position: relative; } </style> <

从0开始制作一个h5小游戏:开篇

我这个人,想法很多,但是实现很少. 虽然大部分的想法都有去开始实践,从我的blog啦,代码库啦都可以看得出来,但是最终基本都没能坚持下来. 理由有很多: 没人监督,自制力不够啦:没有相熟的美术啦:公司项目排期紧啦. 但是,特么的,一个能够晚上打游戏打到2,3点的人为毛做点正事有这么多借口呢. 所以最终还是自己的自制力不够,然后还有就是需求混乱的原因. 所以在做这个之前,先明确一下自己要做什么,应该从哪里切入比较好. 然后今天中午胡思乱想的时候,想到自己近期做事情也不是很顺利,应该是切入点不对.

js+Jquery 制作推箱子小游戏

<!DOCTYPE html> <html> <head> <title>Sokaban</title> <meta charset="utf-8"> <style type="text/css"> .roads { width: 50px; height: 50px; background: url(img/roods.png); background-size: 100% 100

.NET手撸2048小游戏

.NET手撸2048小游戏 2048是一款益智小游戏,得益于其规则简单,又和2的倍数有关,因此广为人知,特别是广受程序员的喜爱. 本文将再次使用我自制的"准游戏引擎"FlysEngine,从空白窗口开始,演示如何"手撸"2048小游戏,并在编码过程中感受C#的魅力和.NET编程的快乐. 说明:FlysEngine是封装于Direct2D,重复本文示例,只需在.NET Core 3.0下安装NuGet包FlysEngine.Desktop即可. 并不一定非要做一层封装

【开发记录】微信小游戏开发入门——俄罗斯方块

叨叨 我在前一阵子,打算做一个微信小游戏,当然是单机的,只是为了了解小游戏开发的过程,最终选择了俄罗斯方块这一经典小游戏作为demo,源代码已托管值github,当然,这个游戏demo对用不并不友好,但是已经可以让我入门小程序开发了XD. demo地址:https://github.com/nbclw/Laya_Brick 准备 在任何开发前都需要对要开发的东西有一定的了解.准备: 小游戏原理:微信小游戏是属于H5游戏的一种吧,我是这样理解的:在H5中,有一个叫Canvas(画布)的存在,与电脑