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所示。
CCMutable Array定义函数的使用如代码清单3-39所示。
代码清单3-39 CCMutableArray定义函数
CCMutableArray<AstarItem*> open = new CCMutableArray<AstarItem*>();
其中AstarItem为自己定义的类,继承自CCObject,使用时调用相应函数就可以了。
Cocos2D-x 2.0以后的版本,CCArray取代了CCMutableArray。CCArray的常用函数如表3-19所示。
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所示。
CCMutableDictionary定义函数的使用如代码清单3-41所示。
代码清单3-41 CCMutableDictionary的定义函数
CCMutableDictionary<string,CCString *> *tiledic = map->propertiesForGID(tilegid);
CCDictionary的常用函数如表3-21所示。
CCDictionary定义函数的使用如代码清单3-42所示。
代码清单3-42 CCDictionary的定义函数
CCDictionary* pRet = new CCDictionary();