0%

CVP认证学习笔记--(何小成)026--数组的使用

概念

本节讲解cocos2d-js中数组的使用,其实数组不是cocos特有的,这是js中的一种数据结构,与Java,C中的数组稍有不同,js中的数组能存储任意类型的元素,并且在声明时无需指定长度,与Java中的List的用法更相似。不过js中数组的强大,有时候也会为开发调试带来不少烦恼,使用时还是要注意符合规范。在cocos中,数组经常被用来存储渲染的Node对象,以方便管理,如前面我写到的打飞机,子弹就可以用数组来管理,每一帧的逻辑,都可以通过遍历子弹数组,来判断是否有子弹飞出屏幕或击中玩家飞机。

API

数组常用的使用方法如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
// shift:删除原数组第一项,并返回删除元素的值;如果数组为空则返回undefined 
var a = [1,2,3,4,5];
var b = a.shift(); //a:[2,3,4,5] b:1
// unshift:将参数添加到原数组开头,并返回数组的长度
var a = [1,2,3,4,5];
var b = a.unshift(-2,-1); //a:[-2,-1,1,2,3,4,5] b:7
// pop:删除原数组最后一项,并返回删除元素的值;如果数组为空则返回undefined
var a = [1,2,3,4,5];
var b = a.pop(); //a:[1,2,3,4] b:5
// push:将参数添加到原数组末尾,并返回数组的长度
var a = [1,2,3,4,5];
var b = a.push(6,7); //a:[1,2,3,4,5,6,7] b:7
// concat:返回一个新数组,是将参数添加到原数组中构成的
var a = [1,2,3,4,5];
var b = a.concat(6,7); //a:[1,2,3,4,5] b:[1,2,3,4,5,6,7]
// splice(start,deleteCount,val1,val2,...):从start位置开始删除deleteCount项,并从该位置起插入val1,val2,...
var a = [1,2,3,4,5];
var b = a.splice(2,2,7,8,9); //a:[1,2,7,8,9,5] b:[3,4]
var b = a.splice(0,1); //同shift
a.splice(0,0,-2,-1); var b = a.length; //同unshift
var b = a.splice(a.length-1,1); //同pop
a.splice(a.length,0,6,7); var b = a.length; //同push
// reverse:将数组反序
var a = [1,2,3,4,5];
var b = a.reverse(); //a:[5,4,3,2,1] b:[5,4,3,2,1]
// sort(orderfunction):按指定的参数对数组进行排序
var a = [1,2,3,4,5];
var b = a.sort(); //a:[1,2,3,4,5] b:[1,2,3,4,5]
// slice(start,end):返回从原数组中指定开始下标到结束下标之间的项组成的新数组
var a = [1,2,3,4,5];
var b = a.slice(2,5); //a:[1,2,3,4,5] b:[3,4,5]
// join(separator):将数组的元素组起一个字符串,以separator为分隔符,省略的话则用默认用逗号为分隔符
var a = [1,2,3,4,5];
var b = a.join("|"); //a:[1,2,3,4,5] b:"1|2|3|4|5"

作业

本节作业:
本节要求掌握js中数组的使用,在作业中完成通过数组动态管理node对象
作业代码实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
var allnpc=new Array();//定义数组
var HelloWorldLayer = cc.Layer.extend({
sprite:null,
ctor:function () {
//////////////////////////////
// 1. super init first
this._super();
var item01=new cc.MenuItemFont("添加元素",this.callback,this);
var item02=new cc.MenuItemFont("删除元素",this.callback,this);
item01.setPositionY(200);
item02.setPositionY(160);
item01.setTag(11);
item02.setTag(12);
var menu=new cc.Menu(item01,item02);
this.addChild(menu);
// 本章介绍了数组的使用
// 通过数组可以动态管理一组对象
// 作业要求
// 将这5个按钮对应于添加一个Node后将node显示
// 这是第N个节点
// 当删除某个Node后,将这个Node从屏幕移除
var count = new cc.LabelTTF("数组共0个Node","",30);
count.setPosition(menu.getPositionX(),menu.getPositionY()+20);
this.addChild(count);
count.setTag(3);
return true;
},
callback:function(obj)
{
var newobj=new cc.Sprite("res/logo.png");
newobj.setPosition(Math.random()*cc.winSize.width,Math.random()*cc.winSize.height);
newobj.tag=allnpc.length+1;
switch(obj.getTag())
{
case 11:
allnpc.push(newobj);
this.addChild(newobj);
break;
case 12:
var oldobj = allnpc.pop();
this.removeChild(oldobj);
break;
}
this.getChildByTag(3).setString("数组共"+allnpc.length+"个Node");
}
});

var HelloWorldScene = cc.Scene.extend({
onEnter:function () {
this._super();
var layer = new HelloWorldLayer();
this.addChild(layer);
}
});

最终效果

http://www.cocoscvp.com/usercode/2016_05_20/694a9a04efbc2d25a7a879cf2ac399a0e7ec46a2/

大爷赏点儿呗.

欢迎关注我的其它发布渠道