6.6.1 砖块地图类CCTMXTiledMap(2)
通过上面的介绍,读者已经清楚了类CCTMXTiledMap所提供的功能以及使用的限制。其初始化的函数非常简单易用,只需要将地图数据的文件名作为参数传递,就可以创建一个地图对象。先不着急为读者演示示例程序,先把所有的知识介绍完成后,再来看具体的使用代码。
代码6-3 类CCTMXTiledMap的成员函数
1. //成员函数
2. //得到地图背景的尺寸
3. virtual const CCSize & getMapSize (void)
4. //设置地图背景的尺寸
5. virtual void setMapSize (const CCSize &var)
6. //得到地图背景中砖块元素的尺寸
7. virtual const CCSize & getTileSize (void)
8. //设置地图背景中砖块元素的尺寸
9. virtual void setTileSize (const CCSize &var)
10. //获得物体层中所有对象
11. virtual CCArray * getObjectGroups (void)
12. //设置物体层的容器
13. virtual void setObjectGroups (CCArray *var)
14. //获得地图的属性
15. virtual CCDictionary * getProperties (void)
16. //设置地图属性
17. virtual void setProperties (CCDictionary *var)
18. //构造函数
19. CCTMXTiledMap ()
20. //析构函数
21. virtual ~CCTMXTiledMap ()
22. //一个初始化函数
23. bool initWithTMXFile (const char *tmxFile)
24. //另一个初始化函数
25. bool initWithXML (const char *tmxString, const char *resourcePath)
26. //根据图层的名字,来获得图层
27. CCTMXLayer * layerNamed (const char *layerName)
28. //根据物体层的名字,来获得物体层
29. CCTMXObjectGroup * objectGroupNamed (const char *groupName)
30. //根据属性的名字,来获得数值
31. CCString * propertyNamed (const char *propertyName)
32. //根据GID,获得属性字典
33. CCDictionary * propertiesForGID (int GID)
上述代码6-3列出了类CCTMXTiledMap所有的公共成员方法。读者将会逐渐地熟悉并使用它们。在创建了一个地图对象之后,开发者就将其显示在画面当中。为了便于读者的理解,已经为每个函数都添加了注释。
下面来介绍一些包含于类CCTMXTiledMap内部的对象。这些对象也与上述函数存在关系。经过前面的例子,我们知道一个地图背景中可以包含很多的层次。Cocos2D-X引擎当中也设计了一个针对砖块图层的类CCTMXLayer。因为拼块图层中包含了许多的砖块精灵对象,但是它们的纹理图片都是来自一张,所以拼块地图具备了较快的绘制速度。
注意:类CCTMXLayer继承自CCSpriteBatchNode。它也具备了一个父类的特点,只能使用一张纹理图片作为精灵图集。
开发者可以通过地图中每个图层的名字来获得对应对象。另外,也可以通过标签值来获取对应的图层。注意图层的标签是按照前后顺序在创建地图对象时赋予的。具体的代码如下。
1. map->getChildByTag(tag_number); // 0=1st layer, 1=2nd layer, 2=3rd layer, etc...
2. map->layerNamed(name_of_the_layer);
通过上面的两个函数,可以获得对应图层的对象。比如layerNamed函数,就是通过图层名字来获得对应的图层。此方法将会返回一个CCTMXLayer对象。此对象就代表了一个在地图中的拼接图层。类CCTMXLayer对象包含了当前图层的拼接数据。
注意:被设置成不可见的图层,在创建地图时,将不会被创建为对象。
这也就是说不能使用上述函数来获取。还有一个特殊的图层,那就是物体层。此图层内的数据,并不是按照地图的网格来划分,而是由一个个对象组成。物体层更适合作为一个存放的容器类。
因此引擎的设计者就将物体层用另一个类CCTMXObjectGroup来表示了。每一个类CCTMXObjectGroup的对象中都包含了多个类CCTMXObject的对象。在地图对象中,开发者可以使用下面的函数来获得物体层的数据,此函数的返回值也就是对象容器的指针。
1. map->objectGroupNamed(name_of_the_object_group);
上述函数objectGroupNamed将根据参数中的名字返回一个物体层对象。在获得了对象容器组织后,开发者可以遍历其含有的对象,以此就能获得需要的对象物体。
除了上面介绍的函数,地图对象中还有一对与属性有关的函数。
1. map->propertyNamed(name_of_the_property);
2. layer->propertyNamed(name_of_the_property);
3. objectGroup->propertyNamed(name_of_the_property);
4. object->propertyNamed(name_of_the_property);
上述函数propertyNamed是根据属性的名字返回属性的数值。地图对象中各种属性,都是一个键值与数值的一一对应关系。上面列出了地图对象、图层对象、物体层以及物体获得属性的函数。最后一个函数propertiesForGID则是将地图对象所有的属性作为一个字典容器来返回。
到此为止,所有与类CCTMXTiledMap有关的内容都已经介绍过了。此类只是作为一个地图对象,包含了所有编辑器中的拼接信息。它包含了砖块元素、图层对象、物体层以及自身的属性。它就是地图背景的使用者。开发者需要利用它来显示游戏背景。