且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《Cocos2D-x权威指南》——3.7 容器类

更新时间:2022-09-27 12:51:53

3.7 容器类

之前已经说过了,为了方便从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脚本。
3.7.1 CCMutableArray和CCArray
之前已经说过了,Cocos2D-x 2.0以后的版本已经不支持CCMutableArray了,本书讨论CCMutableArray只是为了使读者看到之前的游戏代码时不会疑惑。
可以把CCMutableArray理解成是一个数组的容器,装载的对象只要是CCObject的子类就可以。CCMutableArray的常用函数如表3-18所示。
《Cocos2D-x权威指南》——3.7 容器类

CCMutable Array定义函数的使用如代码清单3-39所示。
代码清单3-39 CCMutableArray定义函数

CCMutableArray<AstarItem*> open = new CCMutableArray<AstarItem*>();

其中AstarItem为自己定义的类,继承自CCObject,使用时调用相应函数就可以了。
Cocos2D-x 2.0以后的版本,CCArray取代了CCMutableArray。CCArray的常用函数如表3-19所示。
《Cocos2D-x权威指南》——3.7 容器类
《Cocos2D-x权威指南》——3.7 容器类

CCArray定义函数的使用如代码清单3-40所示。
代码清单3-40 CCArray定义函数

CCArray *newArray = new CCArray(m_pControlPoints->count());

可以发现,它不用确定存储对象的类型,因此每个对象的类型可以不相同,这也是CCArray的一个特点。
3.7.2 CCMutableDictionary和CCDictionary
CCMutableDictionary和CCDictionary类似于哈希表的键值对应的容器,同样,在Cocos2D-x 2.0之前的版本有CCMutableDictionary,2.0以后的版本使用CCDictionary。CCMutableDictionary的常用函数如表3-20所示。
《Cocos2D-x权威指南》——3.7 容器类

CCMutableDictionary定义函数的使用如代码清单3-41所示。
代码清单3-41 CCMutableDictionary的定义函数

CCMutableDictionary<string,CCString *> *tiledic = map->propertiesForGID(tilegid);

CCDictionary的常用函数如表3-21所示。
《Cocos2D-x权威指南》——3.7 容器类

CCDictionary定义函数的使用如代码清单3-42所示。
代码清单3-42 CCDictionary的定义函数

CCDictionary* pRet = new CCDictionary();