cocos2d-x 2D砖块地图实现技术之二

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有关的内容都已经介绍过了。此类只是作为一个地图对象,包含了所有编辑器中的拼接信息。它包含了砖块元素、图层对象、物体层以及自身的属性。它就是地图背景的使用者。开发者需要利用它来显示游戏背景。

你可能感兴趣的:(cocos2d-x,CCTMXTiledMap)