如何使用Createjs来编写HTML5游戏TweenJS和Tick动画

作者&投稿:勾肢 (若有异议请与网页底部的电邮联系)
如何使用Createjs来编写HTML5游戏完成一个简单的打飞机游戏~

CreateJS包含4个部分,EaselJS、TweenJS、PreloadJS、SoundJS,其中最主要的部分EaselJS包含了开发Html5游戏的所有功能,仅仅使用EaselJS几乎可以完成所有的开发工作,其余三项可以看作EaselJS的辅助工具。比如响应tick事件然后改变元素坐标就可以实现动画功能,而使用TweenJS来创建补间动画,则可以省去你很多代码,简化了操作。一个简单的tick动画看起来是这样的:var stage, circle;
function init(){
stage = new createjs.Stage(document.getElementById('game'));
createjs.Ticker.addEventListener("tick", handleTick);
createjs.Ticker.setFPS(60);
circle = new createjs.Shape();
circle.graphics.f("red").dc(0,0,50);
circle.x = 0;
circle.y = 100;
stage.addChild(circle);

circle.addEventListener("click", function(event){
createjs.Ticker.setPaused(!createjs.Ticker.getPaused());
});

}

function handleTick(event){
if(!event.paused){
circle.x +=5;
if(circle.x > 1000){
circle.x = 0;
}
}
stage.update();
}

CreateJS最后两个部分,PreloadJS用来加载并统一管理你游戏中用到资源,图片,json文件等等,而SoundJS用来播放声音,两者的用法都非常的简单而且固定。
首先是SoundJS,顾名思义播放声音,使用时只需要先
createjs.Sound.registerSound("assets/sound.mp3", "soundname");

使用时调用:
createjs.Sound.play("soundname");

最后是PreloadJS,使用PreloadJS导入文件首先建立一个LoadQueue,然后即可使用它来载入单个文件,或者载入一个文件列表
var queue = new createjs.LoadQueue(false);//本地开发使用false即可
queue.installPlugin(createjs.Sound);//如果载入声音,必须先注册createjs.Sound
queue.on("complete", handleComplete, this);//载入完成后调用
queue.loadFile({id:"sound", src:"sound.mp3"});//载入单个文件
//载入一个文件列表
queue.loadManifest([
{id: "myImage1", src:"Image1.jpg"},
{id: "myImage2", src:"Image2.jpg"}
{id: "myImage3", src:"Image3.jpg"}
{id: "myImage4", src:"Image4.jpg"}
]);
function handleComplete() {
createjs.Sound.play("sound");
var image = queue.getResult("myImage1");
var bitmap = new createjs.Bitmap(image);
}

你可以把游戏中用到的所有资源,先编辑到一个manifest列表当中,可以是图片,json,css,js等等,最后使用loadManifest(manifest)导入

createJs的由来,基础什么的就不说了,就直接说createJs的用法吧。
首先到createJs官网下载,createJs分成easelJs(图形动画)、preloadJs(文件加载)、soundJs(音频控制)以及tweenJs(补间动画)四部分,大家下载的时候,建议下载两个文件,一个是压缩版文件,用于项目中的引用,再下载个源码文件,用于查看用法、API、demo等。因为楼主目前只用了easelJs和preloadJs,所以暂时就只说这两个,其实就这两个已经非常够用了。
接下来开始分析代码:
首先引入js文件
<script src="easeljs-0.7.1.min.js"></script>
<script src="preloadjs-0.4.1.min.js"></script>

然后进行舞台初始化操作:
function init(){
stage = new createjs.Stage("cas");
C_W = stage.canvas.width;
C_H = stage.canvas.height;

var manifest = [
{src:"image/man.png" , id:"man"},
{src:"image/ground.png" , id:"ground"},
{src:"image/bg.png" , id:"bg"},
{src:"image/high.jpg" , id:"high"},
{src:"image/coins.png" , id:"coin"}
]

loader = new createjs.LoadQueue(false);
loader.addEventListener("complete" , handleComplete);
loader.loadManifest(manifest);

drawLoading();
}

上面就用到了preloadJs中的方法,实例化一个loader,把需要加载的图片文件放在manifest里面,进行加载,加载完成后调用回调handleCompelete函数:
function handleComplete(){ //当图片素材load完后执行该方法
var manImage = loader.getResult("man"),
lowground = loader.getResult("ground"),
highground = loader.getResult("high"),
bgImage = loader.getResult("bg"),
coins = loader.getResult("coin");

sky = new createjs.Shape();
sky.graphics.bf(bgImage).drawRect(0,0,C_W,C_H);
sky.setTransform(0, 0, 1 , C_H/bgImage.height);
stage.addChild(sky);

man = createMan(200,326,manImage);

//该框为判定角色的判定区域
kuang = new createjs.Shape();
kuang.graphics.beginStroke("rgba(255,0,0,0.5)").drawRect(0 , 0 , man.size().w , man.picsize().h*1.5);
// stage.addChild(kuang);

mapHandle(lowground , highground , coins);

createjs.Ticker.timingMode = createjs.Ticker.RAF;//设置循环方法,可以是requestAnimationFrame或者是setTimeout
createjs.Ticker.setFPS(30);//舞台帧率控制
createjs.Ticker.addEventListener("tick", tick);//绑定舞台每一帧的逻辑发生函数

window.addEventListener("keydown" , function(event){
event = event||window.event;
if(event.keyCode===32&&man.jumpNum<man.jumpMax){
man.jump();
}
})
}

获得加载完成后端的图片数据就直接用loader.getResult就可以获取了,跑酷游戏需要一个背景,所以,我们实例化一个sky,然后进行位图绘制,bf方法是beginBitmapFill的缩写,该方法就是开始绘制位图,后面的drawRect是位图的绘制区域,区域当然是整个画布啦,所以就是drawRect(0,0,C_W,C_H)。实例化出来sky后就直接添加到舞台stage里面就行了。接下来是实例化一个角色,createMan方法后面有说,是自己封装的。
然后进行舞台循环设置,上面有注释了,就不说了。


create是什么意思及用法
1. 作为及物动词:当create用作及物动词时,意味着“创造”、“产生”或“创建”。后面可以直接接名词或名词短语作为宾语,表示创造出的具体事物。例如:She created a beautiful painting. 她创作了一幅美丽的画。2. 与其他词汇搭配:Create经常与一些词汇搭配使用,以...

如何在MySQL中创建表格create语句详解mysql中create
) ENGINE=InnoDB DEFAULT CHARSET=utf8;以上代码中:CREATE TABLE用于创建表格,student为表格名称,其中共有四个字段,数据类型包括INT、VARCHAR、SMALLINT、FLOAT。其中,id为主键,使用AUTO_INCREMENT可以使id自动增加,不需要手动输入。五、总结 在MySQL中创建表格是数据库管理中非常基础的操作,Create语句...

CImageList函数的create函数如何使用呀?
CImageList的create函数用于创建一个图像列表。在Windows编程中,CImageList是一个用于处理图像列表的类,而create函数则是该类的一个成员函数,用于创建图像列表。图像列表是一种存储图像对象的集合,通常用于在控件(如列表框或树形控件)中显示图像。要使用CImageList的create函数,首先需要创建一个CImageList对象...

使用CREATE+DATABASE语句完成创建数据库XSCJ+,+YGGL和DEMO的操作?_百 ...
在SQL中,可以使用CREATE DATABASE语句来创建数据库。这是一个简单的例子:sql复制代码 CREATE DATABASE XSCJ;CREATE DATABASE YGGL;CREATE DATABASE DEMO;每个CREATE DATABASE语句都会创建一个新的数据库。请注意,如果已经存在同名的数据库,那么这些命令将会失败。在实际应用中,创建数据库可能需要更多的...

如何使用SQL CREATE TABLE语句创建一个包含多个列的表?
CREATE TABLE Persons(PersonID int, LastName varchar(255), FirstName varchar(255), Address varchar(255), City varchar(255));其中,PersonID列存储整数,而LastName、FirstName、Address和City列则允许最多255个字符的字符串数据。在实际操作中,一开始这些列是空的,需要使用INSERT INTO语句来填充...

关于Create函数的使用问题
提示你无法将你输入的第二个字符串参数转变为LPCTSTR格式的。我用的是VC6.0,我只知道CWnd::create函数中的LPCTSTR不能有'\\0'结束符。而且Creat的形参是6个,而不是2个。

ACCESS中怎么用Creat Table 创建表,在那可以建立?
如果是在Access中的话:1、直接点左侧的[查询]项2、再双击[在设计视图中创建查询](默认出来的窗口是 选择查询)3、直接在空白区域点右键-[SQL视图](或者点菜单[视图]-[SQL视图])4、输入你的Create Table语句5、点执行第三步也可以用直接点菜单[查询]-[SQL 特定查询]-[数据定义]的方式。

CREATE VIEW语句怎么用?
使用CREATE VIEW语句创建视图 语法格式为:CREATE VIEW 视图名[(列名1,列名2[,…n])][WITH ENCRYPTION]]AS 查询语句 [WITH CHECK OPTION]其中:l 列名 视图中包含的列,可以有多个列名,最多可引用1024个列。若使用与源表或视图中相同的列名时,则不必给出列名。l ENCRYPTION 说明在系统...

android的MediaPlayer.create方法怎么用
1.如何获得MediaPlayer实例:可以使用直接new的方式:MediaPlayer mp = new MediaPlayer();也可以使用create的方式,如:MediaPlayer mp = MediaPlayer.create(this, R.raw.test);\/\/这时就不用调用setDataSource了 2.如何设置要播放的文件:MediaPlayer要播放的文件主要包括3个来源:a. 用户在应用中事...

使用createtable关键字一次可以创建多个数据库
CREATE TABLE 语句的主要语法及使用说明如下:CREATE TABLE:用于创建给定名称的表,必须拥有表CREATE的权限。<表名>:指定要创建表的名称,在 CREATE TABLE 之后给出,必须符合标识符命名规则。表名称被指定为 db_name.tbl_name,以便在特定的数据库中创建表。无论是否有当前数据库,都可以通过这种方式...

日喀则地区18859502789: 如何使用createjs来编写html5游戏 -
晁肃复方: createJs的由来,基础什么的就不说了,就直接说createJs的用法吧.首先到createJs官网下载,createJs分成easelJs(图形动画)、preloadJs(文件加载)、soundJs(音频控制)以及tweenJs(补间动画)四部分,大家下载的时候,建议下载...

日喀则地区18859502789: 如何使用Createjs来编写HTML5游戏完成一个简单的打飞机游戏 -
晁肃复方: CreateJS包含4个部分,EaselJS、TweenJS、PreloadJS、SoundJS,其中最主要的部分EaselJS包含了开发Html5游戏的所有功能,仅仅使用EaselJS几乎可以完成所有的开发工作,其余三项可以看作EaselJS的辅助工具.比如响应tick事件然...

日喀则地区18859502789: 如何使用JavaScript创建一个动态表格 -
晁肃复方: // 你的 HTML 的 body 中添加如下内容// 一个 div 用来放生成的 table ; 一个按钮执行 create // <div id="div"></div> // <input type="button" onclick="create()" /> // 以下是 js 方法<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/...

日喀则地区18859502789: 如何用htHTML+CSS+JS实现如下图效果,即图片循环滚动播放 -
晁肃复方: html> t>PreviousNext1. 12. 23. 3========================================== slider,jq自己下载,相信不用我教.顺便可以看看教程,对这些有点了解.

日喀则地区18859502789: java里怎样用js动态生成表格? -
晁肃复方: <html><head> <title>使用javascript动态创建表格table</title><SCRIPT LANGUAGE="JavaScript"> function CreateTable(disposeCount,resolveCount,remainCount){//创建表格 var oTable = document.createElement("table"); oTable....

日喀则地区18859502789: java里怎样用js动态生成表格? -
晁肃复方: 使用javascript动态创建表格table function CreateTable(disposeCount,...

日喀则地区18859502789: 如何使用winchm将html转为chm格式 -
晁肃复方: 1 首先准备好要制作的html,然后打开winchm,在弹出的对话框中选择“create a new project”!2 接着在New Project中选择“create a project using existing html files”,然在“project title”中输入你想要建立的工程的名字,在“html position”...

日喀则地区18859502789: JavaScript里面的innerHTML到底怎么用?什么时候才用到innerHTML?到底HT -
晁肃复方: 举个例子,现在有个<span id='aa'></span>的标签,你想在里面加一个连接,内容叫测试,并且设置点击事件,你就可以这样:通过id aa获取span对象,然后.innerHTML=<a href="javascript:void(0);" onclick='test()' alt="测试" title="测试"...

日喀则地区18859502789: js中Ext.create()是什么东西 ? 有什么作用?求解答 -
晁肃复方: Ext.create<br>说明:实例化类,在EXTJS4中建议用create方法实例化类<br>Ext.onReady(function () {<br>//创建一个类,类名:TextClass,具有两个属性:A、B<br>Ext.define('TextClass', {<br>A: 'a',<br>B: 'b'<br>});<br>var textClass = Ext.create("TextClass")<br>Ext.Msg.alert('textClass属性', textClass.A + ' ' + textClass.B )<br>});

日喀则地区18859502789: createjs 如何改变stage坐标原点 -
晁肃复方: js获取DIV的位置坐标的方法有三种,分别如下:<br><br>方法一:<br><br>?<br>var odiv=document.getElementByIdx_x('divid');<br>alert(odiv.getBoundingClientRect().left);<br>alert(odiv.getBoundingClientRect().top);<br>方法二:<br><br>?<br...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网