cocos2d-js开发入门

  • 格式:pdf
  • 大小:575.36 KB
  • 文档页数:6

cocos2d-js开发⼊门

第⼀步,环境搭建

⾸先去官⽹下载cocos2d-x压缩包:

这⾥我选择的是3.x版本的完整SDK:

解压到任意⽬录运⾏python setup.py安装即可,不过这⾥的python版本是2.x。

新建⼯程:cocos new -l js ⼯程名

进⼊⼯程⽬录运⾏:cocos run -p web

在浏览器上看到如下画⾯即可表⽰程序运⾏成功:

第⼆步,cocos2d-js基础

上⾯的环境搭建和使⽤命令⾏新建⼯程是⼀般的流程,不过如果我们想具体了解⼀下cocos是如何运⾏⼀个程序的话,可以⼿动来创建⼀个简单的⼯程,在下载好的SDK⼯具包

中需要使⽤的是如下图所⽰的web⽂件夹:

运⾏cocos需要服务器环境,于是在服务器的www⽬录下新建⼀个game⽂件夹,将SDK中的web⽂件夹解压到此处并重命名为cocos2d-html5,下图是必要的⼯程结构:

cocos2d-html5是web游戏引擎应该不需要解释;

res⽂件夹⽤来存放⼀些⾳频或者图⽚资源;

src存放游戏的脚本资源,主要在该⽂件夹下编写游戏逻辑和加载游戏的媒体资源,包含app.js和resource.js;

index.html是运⾏游戏的默认web页⾯;

main.js是⽤于开始加载游戏cocos2d-js脚本;

project.json是运⾏游戏必要的配置⽂件。

准备好⼯程⽬录以后开始编写游戏的代码:

⾸先是index.html:

1

2

3

4

5

6

7 Document

8

9

10

11

12

13

14

canvas节点是运⾏游戏必要的“舞台”,然后再引⼊CCBoot.js和main.js⽂件,html代码应该不怎么需要解释吧。

然后是main.js:

1 cc.game.onStart = function() {

2 cc.view.setDesignResolutionSize(1280, 800, cc.ResolutionPolicy.SHOW_ALL);

3 cc.director.runScene(new gameScene());

4 };

5 cc.game.run();

cc是cocos2d对象的简称,新建的游戏叫做cc.game,⾸先给游戏开始运⾏事件设置⼀些参数:

使⽤setDesignResolutionSize ⽅法来设置分辨率,同时设置游戏适应浏览器全屏运⾏;

然后运⾏gameScene场景,这是我们⾃⼰定义的游戏场景,后续会详细介绍。

接着是project.json配置⽂件:

1 {

2 "debugMode" : 0,

3 "showFPS" : false,

4 "frameRate" : 60,

5 "id" : "gameCanvas",

6 "renderMode" : 0,

7 "engineDir":"cocos2d-html5",

8 "modules" : ["cocos2d"],

9 "jsList" : [

10 "src/resource.js",

11 "src/app.js"

12 ]

13 }

debugMode:有0~6共7个等级,⽤来设置显⽰哪些错误或警告信息,这⾥设置为0即不显⽰信息;

showFPS : 是否显⽰FPS,玩游戏⼤家应该都懂吧;

frameRate:设置游戏帧数,24帧⼈眼就不会感到画⾯闪烁了,因此60帧应该算⽐较流畅的;

id:⽤来指定哪个DOM节点来运⾏游戏,还记得前⾯设置过的id为gameCanvas的canvas节点吗,你设置了没有?

renderMode:渲染模式,官⽅推荐设为0;engineDir :引擎⽬录,就是前⾯SDK中解压的web⽂件夹,不过改名为cocos2d-html5了;

jsList :数组,说明需要哪些必要的游戏脚本⽂件,⼀般都放置在src⽂件夹下。

最后,来编写游戏的基本逻辑src/app.js:

1 var gameScene = cc.Scene.extend({

2 onEnter: function () {

3 this._super();

4 console.log("my first game starts here");

5 }

6 });

这⾥主要定义gameScene场景⽅法,将在main.js⽂件中建⽴场景⽽运⾏。现在打开浏览器输⼊localhost/game应该可以在控制台看到输出了“my first game starts here”字样,到

⽬前为⽌游戏⾥还没有精灵(⼀般在游戏⾥将可以与玩家交互的图⽚称为“精灵”),下⾯将导⼊图⽚资源来创建精灵res/player.png:

这是⼀只可爱的像素鸟,现在打开src/resource.js⽂件:

1 var gameResources = [

2 "res/player.png"

3 ];

然后修改main.js来预加载该图⽚资源:

1 cc.game.onStart = function() {

2 cc.view.setDesignResolutionSize(1280, 800, cc.ResolutionPolicy.SHOW_ALL);

3 cc.LoaderScene.preload(gameResources, function () {

4 cc.director.runScene(new gameScene());

5 }, this);

6 };

7 cc.game.run();

最后修改src/app.js来显⽰精灵:

1 var gameScene = cc.Scene.extend({

2 onEnter: function () {

3 this._super();

4 var gameLayer = new game();

5 gameLayer.init();

6 this.addChild(gameLayer);

7 }

8 });

9

10 var game = cc.Layer.extend({

11 init: function () {

12 this._super();

13 var target = cc.Sprite.create("res/player.png");

14 this.addChild(target, 0);

15 }

16 });

这个时候打开浏览器,emmm。。。注意屏幕左下⾓应该可以看到1/4像素鸟:

不是很明显,这是因为cocos的锚点设置默认在图⽚中⼼,⽽坐标系原点⼜在屏幕左下⾓(⼀般的程序都是在左上⾓),引⽤cocos中⽂⽹站的⼀张图⽚加以说明:

注意每张图⽚中的红点,它表⽰图⽚的锚点位置。

现在来修改精灵的显⽰位置,由于我这⾥设置的分辨率为1280x800,所以精灵的显⽰位置应该是(640, 400),修改src/app.js:

1 var gameScene = cc.Scene.extend({

2 onEnter: function () {

3 // same as before

4 }

5 });

6

7 var game = cc.Layer.extend({

8 init: function () {

9 this._super();

10 var target = cc.Sprite.create("res/player.png");

11 this.addChild(target, 0);

12 target.setPosition(640, 400);

13 }

14 });

然后重新打开浏览器可以看到像素鸟已经在屏幕中间显⽰了。有了显⽰精灵的基础,接下来我们可以来制作⼀些简单逻辑的⼩游戏。

第三步,简单逻辑游戏的开发:Concentration gameConcentration game 是⼀个和连连看差不多的⼩游戏,⾸先准备素材:

在前⾯的基础上需要修改的主要是src⽂件夹下的js⽂件,这也是模块化设计的优点。先修改src/resource.js⽂件导⼊资源:

1 var gameResources = [

2 "res/cover.jpg",

3 "res/tile_0.jpg",

4 "res/tile_1.jpg",

5 "res/tile_2.jpg",

6 "res/tile_3.jpg",

7 "res/tile_4.jpg",

8 "res/tile_5.jpg",

9 "res/tile_6.jpg",

10 "res/tile_7.jpg"

11 ];

接下来是修改src/app.js⽂件,都是⼀些简单逻辑,部分函数不太明⽩的可以去cocos官⽅查看API⼿册,这⾥不再详细展开,源码如下:

1 // 定义瓷砖序列

2 var gameArray = [0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7];

3 // 翻开的瓷砖

4 var pickedTiles = [];

5 // 显⽰移动步数

6 var scoreText;

7 var moves = 0;

8

9 // 打乱数组:从数组末端出发,每次与前⾯随机⼀个元素交换

10 var shuffle = function(v) {

11 for(var j, x, i = v.length; i; j = parseInt(Math.random() * i), x = v[--i], v[i] = v[j], v[j] = x);

12 return v;

13 };

14

15 // 游戏场景⽅法

16 var gameScene = cc.Scene.extend({

17 onEnter: function() {

18 gameArray = shuffle(gameArray);

19 this._super();

20 var gameLayer = new game();

21 gameLayer.init();

22 this.addChild(gameLayer);

23 }

24 });

25

26 // 游戏主要逻辑层

27 var game = cc.Layer.extend({

28 init: function () {

29 this._super();

30 // 背景渐变

31 var gradient = cc.LayerGradient.create(cc.color(0, 0, 0, 255), cc.color(0x46, 0x82, 0xB4, 255));

32 this.addChild(gradient);

33 // 移动步数

34 scoreText = cc.LabelTTF.create("Moves: 0", "Arial", "32", cc.TEXT_ALIGNMENT_CENTER);

35 this.addChild(scoreText);

36 scoreText.setPosition(100, 50);

37 // 4x4瓷砖

38 for (var i = 0; i < 16; i++) {

39 var tile = new MemoryTile();

40 tile.pictureValue = gameArray[i];

41 this.addChild(tile, 0);