|   版权声明:本文为博主原创文章,未经博主允许不得转载。

  Array是一个列表类容器,是一种线性序列结构;列表容器中的元素是有序的,可以通过下标来访问,就和数组一样。其中Vector也是一种列表容器,但是Array的缺陷是不能自动增长,而Vector却可以。

Array的创建函数:

  /** Creates an empty array. Default capacity is 10  创建_Array*/
static __Array* create();
/** Create an array with objects 使用一系列Ref创建_Array*/
static __Array* create(Ref* object, ...) CC_REQUIRES_NULL_TERMINATION;
/** Create an array with one object 使用一个Ref创建_Array*/
static __Array* createWithObject(Ref* object);
/** Create an array with a default capacity创建_Array,并设置容量 */
static __Array* createWithCapacity(ssize_t capacity);
/** Create an array with from an existing array 用一个已经存在的_Array来创建另一个_Array*/
static __Array* createWithArray(__Array* otherArray);
/** @brief Generate a Array pointer by file,param pFileName The file name of *.plist file
return The Array pointer generated from the file从属性列表文件创建_Array*/
static __Array* createWithContentsOfFile(const std::string& pFileName);
/*@brief The same meaning as arrayWithContentsOfFile(), but it doesn't call autorelease, so the
invoker should call release().*/
static __Array* createWithContentsOfFileThreadSafe(const std::string& pFileName);

常用添加元素函数:

向_Array对象中添加元素都必须是Ref和其子类的对象指针类型。

 /** Add a certain object 添加一个元素*/
void addObject(Ref* object);
/** Add all elements of an existing array 把一个已经存在的__Array对象中的所有元素添加到当前的__Array中*/
void addObjectsFromArray(__Array* otherArray);
/** Insert a certain object at a certain index在指定的位置插入元素,ssize_t是int类型的别名*/
void insertObject(Ref* object, ssize_t index);

常用移除函数:

 /** Remove last object 移除最后一个元素*/
void removeLastObject(bool releaseObj = true);
/** Remove a certain object 移除Array中的某个元素*/
void removeObject(Ref* object, bool releaseObj = true);
/** Remove an element with a certain index 移除一个指定位置的元素*/
void removeObjectAtIndex(ssize_t index, bool releaseObj = true);
/** Remove an objects 移除某个数组_Array对象*/
void removeObjectsInArray(__Array* otherArray);
/** Remove all elements 移除所有的元素*/
void removeAllObjects();
/** Fast way to remove a certain object 快速移除某个元素,把数组的最后一个元素(数值的最后一个远足是NULL)赋值给要删除的元素,但是要注意,这会改变原有与元素的顺序*/
void fastRemoveObject(Ref* object);
/** Fast way to remove an element with a certain index 快速的移除某个指定位置的元素,与fastRemoveObject函数类似*/
void fastRemoveObjectAtIndex(ssize_t index);

替换和交换元素的函数

 /** Swap two elements 交换两个元素*/
void exchangeObject(Ref* object1, Ref* object2);
/** Swap two elements with certain indexes 交换两个指定位置的元素*/
void exchangeObjectAtIndex(ssize_t index1, ssize_t index2);
/** Replace object at index with another object. 用一个对象替代指定位置的元素*/
void replaceObjectAtIndex(ssize_t index, Ref* object, bool releaseObject = true);

其他函数:

 /** Revers the array 反转Array */
void reverseObjects();
/**判断Array对象是否相等*/
bool isEqualToArray(__Array* otherArray);
/** Returns a random element 随机返回元素*/
Ref* getRandomObject();
/** Returns a Boolean value that indicates whether object is present in array.返回某个元素是否存在Array容器中*/
bool containsObject(Ref* object) const;
/**统计Array的大小*/
ssize_t count();

实例:

.h files

#ifndef _ARRAYTEST_SCENE_H_
#define _ARRAYTEST_SCENE_H_
#include "cocos2d.h"
class arrayTest : public cocos2d::Layer
{
private:
public:
static cocos2d::Scene* createScene();
virtual bool init();
void arrTest();
CREATE_FUNC(arrayTest);
};
#endif // _ARRAYTEST_SCENE_H_ .cpp files #include "ArrayTest.h"
USING_NS_CC;
Scene* arrayTest::createScene()
{
// 'scene' is an autorelease object
auto scene = Scene::create();
// 'layer' is an autorelease object
auto layer = arrayTest::create();
// add layer as a child to scene
scene->addChild(layer);
// return the scene
return scene;
}
bool arrayTest::init()
{
if (!Layer::init())
{
return false;
}
arrTest();
return true;
} void arrayTest::arrTest()
{
//1.创建一个Array
Array* arr = Array::create(); //2.添加元素
arr->addObject(String::create("I "));
arr->addObject(String::create("love"));
arr->addObject(String::create(" China!"));
arr->addObject(String::create("values = 123456")); //3.获得大小
int size = arr->count();
CCLOG("The array size is : count = %d", size);
for (int i = 0; i < size; i++)
{
String* e = (String*)arr->getObjectAtIndex(i);
CCLOG("%s", e->getCString());
} //4.根据索引获得某个元素
String* elem = (String*)arr->getObjectAtIndex(2);
CCLOG("%s", elem->getCString()); //5.删除某个元素
arr->removeObjectAtIndex(3); //6.遍历
size = arr->count();
for (int i = 0; i < size; i++)
{
String* e = (String*)arr->getObjectAtIndex(i);
CCLOG("%s", e->getCString());
}
}

Cocos2d-x之Array的更多相关文章

  1. cocos2d::Vector

    C++中的vector使用范例 一.概述 vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库.vector是一个容器,它能够存放各种类型的对象,简 ...

  2. [一位菜鸟的COCOS-2D编程之路]精灵表单的制作以及简易动画的生成

    1.第一步:使用Zwoptex 制作精灵表单 2.制作的表单的名称为 cocos2Dpng,cocos2D.plist: 3.精灵的动画效果 主要分为五部分. // on "init&quo ...

  3. cocos2d中如何使用图片纹理图集的加载来实现一个动画的功能

    cocos2d中要实现一个动画,一般采用纹理图集的方式,也就是说把几个连续动作的图片挨个显示切换这样就是动画 一: 首先先看下今天要实现的具体的目的,打飞机的时间屏幕上会有一个喷火的小飞机,飞机的尾部 ...

  4. cocos2d基础篇笔记四

    1.//有两种集合 //第一种是array 特点:插入,删除效率低,可是查找效率高 //另外一种是list  特点:插入,删除效率高,可是查找效率低 //分析这个游戏: 插入的时候:怪物,射弹出现时, ...

  5. Cocos2d学习之路三(使用Zwoptex创建精灵表单和CCAnimate动画)

    创建精灵表单: 创建动画先要把图片整合到一个图片上然后生成plist文件: 方法下载Zwoptex软件:http://www.zwopple.com/zwoptex/ 然后打开选择 create ne ...

  6. Cocos2D中Action的进阶使用技巧(二)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 上回说到解决办法是使用CCTargetedAction类. C ...

  7. Cocos2D中Action的进阶使用技巧(一)

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 大家对Cocos2d中动作的使用大概都很清楚了,其实本身act ...

  8. Cocos2D iOS之旅:如何写一个敲地鼠游戏(八):为动画建立属性列表

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请告诉我,如果觉得不错请多多支持点赞.谢谢! hopy ;) 免责申明:本博客提供的所有翻译文章原稿均来自互联网,仅供学习交流 ...

  9. Cocos2d—X游戏开发之CCToggle(菜单标签切换)CCControlSwitch(开关切换)

    Cocos2d—X游戏开发之CCToggle(菜单标签切换) 首先继承子CCMenu,是菜单标签中的一种.‘ class CC_DLL CCMenuItemToggle : public CCMenu ...

  10. cocos2d 中使用jni C++ 调用 Java 方法

    1.简单数据类型样例 如果我们Java中有这么一个open的静态方法,它没有參数,有一个int的返回值.怎么在C++中调用它呢? package cb.CbCCBLE; public class Cb ...

随机推荐

  1. K The Right-angled Triangles

    链接:https://ac.nowcoder.com/acm/contest/338/K来源:牛客网 题目描述 Consider the right-angled triangles with sid ...

  2. C Sleepy Kaguya

    链接:https://ac.nowcoder.com/acm/contest/338/C来源:牛客网 题目描述 Houraisan☆Kaguya is the princess who lives i ...

  3. Vue打包后访问静态资源路径问题

    Vue介绍中static文件夹里放的是静态资源目录,如图片.字体等. 我们发现运行npm run start后本地图片路径是没问题的,但是打包上传后会怎么样呢? 我们知道,执行npm run buil ...

  4. Css3-颜色 color

    一.颜色 RGBA RGB是一种色彩标准,是由红(R).绿(G).蓝(B)的变化以及相互叠加来得到各式各样的颜色.RGBA是在RGB的基础上增加了控制alpha透明度的参数. 语法:color:rgb ...

  5. #import,#include与@class的区别

    1.#include是C中用来引用文件的关键字,而#import是obj-c中用来代替include的关键字.#import可以确保同一个文件只能被导入一次,从而避免了使用#include容易引起的重 ...

  6. OpenStack虚拟机网络问题

    当发现你的OpenStack虚拟机网络有问题,不妨先试一下这16个步骤   1. Security Group全部打开,这是最基本的,但是很多人容易忘记 其实遇到过无数这种场景了,Debug了半天网络 ...

  7. spring cloud学习笔记四 熔断器Hystrix

    我们知道分布式服务有这样一个特点,每一个微服务都有自己的业务,并且很多时候一个微服务的业务要依赖于其他微服务,如果这些相互关联的微服务中其中某个微服务请求失败时,就会导致其他调用它的微服务也会请求失败 ...

  8. max_length 属性

    错误:漏掉了 max_length  属性 ERRORS:users.UserProfile.image: (fields.E210) Cannot use ImageField because Pi ...

  9. Juint test Case 的2种使用方式

    通常情况下,我们去测试一个类中的方法,首先是建立一个包,包中建立一个测试类,在建立测试类文件时,选择JUnit Test Case,如下: 建好之后写测试用例: 但是如果偏就想在编写方法的那个java ...

  10. 如何在MaxCompute上处理存储在OSS上的开源格式数据

    0. 前言 MaxCompute作为使用最广泛的大数据平台,内部存储的数据以EB量级计算.巨大的数据存储量以及大规模计算下高性能数据读写的需求,对于MaxCompute提出了各种高要求及挑战.处在大数 ...