容器类
之前已经说过了,为了方便从Cocos2D-iPhone移植到Cocos2D-x,Cocos2D-x引擎底层实现了一些Objective-C语言框架中的容器类,包括CCMutableArray、CCArray、CCMutableDictionary和CCDictionary。在Cocos2D-x 2.0版本以后,CCMutableArray和CCMutableDictionary继承STL(Standard Template Library,标准模板库)。相比之下,继承UTHash(哈希表的宏实现)的CCArray和CCDictionary效率更高,并且功能也有所增加,更方便绑定JavaScript脚本。
CCMutableArray和CCArray
之前已经说过了,Cocos2D-x 2.0以后的版本已经不支持CCMutableArray了,本书讨论CCMutableArray只是为了使读者看到之前的游戏代码时不会疑惑。
可以把CCMutableArray理解成是一个数组的容器,装载的对象只要是CCObject的子类就可以。CCMutableArray的常用函数如表3-18所示。
表3-18 CCMutableArray的常用函数
函 数 名 返回类型 描 述
CCMutableArray 构造函数 构造函数参数是长度
count 整数 数组长度
getIndexOfObject 整数 获得相应对象的索引
containsObject 布尔型 是否含有相应对象
getLastObject 对象 获得最后一个对象
getObjectAtIndex 对象 根据索引获得对象
addObject 空 增加对象
addObjectsFromArray 空 将一个数组添加进来
insertObjectAtIndex 空 插到某个索引上
removeLastObject 空 删除最后一个对象
removeObject 空 删除对象
removeObjectsInArray 空 删除整个数组的对象
removeObjectAtIndex 空 删除相应索引的对象
removeAllObjects 空 删除所有对象
replaceObjectAtIndex 空 替换相应索引位置的对象
begin 迭代器 获得开始项迭代器
end 迭代器 获得结束项迭代器
CCMutable Array定义函数的使用如代码清单3-39所示。
代码清单3-39 CCMutableArray定义函数
CCMutableArray<AstarItem*> open = new CCMutableArray<AstarItem*>();
其中AstarItem为自己定义的类,继承自CCObject,使用时调用相应函数就可以了。
Cocos2D-x 2.0以后的版本,CCArray取代了CCMutableArray。CCArray的常用函数如表3-19所示。
表3-19 CCArray的常用函数
函 数 名 返回类型 描 述
init 布尔型 初始化
initWithObject 布尔型 初始化,参数为对象
initWithObjects 布尔型 初始化,参数为多个对象
initWithCapacity 布尔型 初始化,参数为个数
initWithArray 布尔型 初始化,参数为数组
count 整数 目前对象个数
capacity 整数 数组对象
indexOfObject 整数 获得相应对象的索引
objectAtIndex 对象 根据索引获得对象
lastObject 对象 返回最后一个对象
randomObject 对象 随机返回一个对象
addObject 空 增加对象
addObjectsFromArray 空 将一个数组添加进来
insertObjectAtIndex 空 插到某个索引上
removeLastObject 空 删除最后一个对象
removeObject 空 删除对象
removeObjectsInArray 空 删除整个数组的对象
reverseObjects 空 颠倒对象
exchangeObject 空 交换两个对象,参数为对象
exchangeObjectAtIndex 空 交换两个对象,参数为索引
fastRemoveObject 空 快速删除一个确定的对象
fastRemoveObjectAtIndex 空 根据索引快速删除一个对象
CCArray定义函数的使用如代码清单3-40所示。
代码清单3-40 CCArray定义函数
CCArray *newArray = new CCArray(m_pControlPoints->count());
可以发现,它不用确定存储对象的类型,因此每个对象的类型可以不相同,这也是CCArray的一个特点。