cocos2dx之瓦片地图

瓦片地图就是为了解决前面提到的问题而产生的。一张大的世界地图或背景图片往往可以由屈指可数的几种地形来表示,每种地形对应于一张小的图片,我们称这些小的地形图片为瓦片。把这些瓦片拼接在一起,一个完整的地图就组合出来了,这就是瓦片地图的原理。

在Cocos2d-x中,瓦片地图实现的是TileMap方案,TileMap要求每个瓦片占据地图上一个四边形或六边形的区域。把不同的瓦片拼接在一起,就可以组成一个完整的地图了。我们需要使用许多较小的纹理来创建瓦片。通常来说,我们会把这些较小的纹理放入一张图片中,就像碎图纹理一样。这样做可以有效地提高绘图性能,同时也为引擎的管理带来了便利。因此,每个小瓦片都应该来自一张大的纹理图片。


TileMap地图支持3种不同的视图:正交视图(orthogonal view,瓦片水平垂直排列)、六边形视图(hexagonal view,六边形瓦片紧密连接)和等轴视图(isometric view,45度斜视排列)


TileMap中的层级关系和Cocos2d-x中的是类似的,地图可以包含多个不同的图层,每个图层内都放置瓦片,同层内的瓦片间平铺排列,而高一层的瓦片可以遮盖低一层的瓦片。与Cocos2d-x不同的是,TileMap的坐标系的原点位于左上角,以一个瓦片为单位,换句话说,左上角第一块瓦片的坐标为(0,0),而紧挨着它的右边的瓦片坐标就是(1,0)。


TileMap中的每一个瓦片拥有一个唯一的编号GID,用于在地图中查找某个瓦片。Cocos2d-x提供了一系列方法,可以从瓦片地图坐标获取对应瓦片的GID,同时还可以利用这些方法来判断某个坐标下是否存在瓦片。稍后我们会看到瓦片地图GID的应用。


Cocos2d-x为我们提供了CCTMXTileMap和CCTMXLayer两个类来处理瓦片地图。其中,CCTMXTileMap代表一个完整的瓦片地图,它负责地图文件的载入、管理以及呈现。与其他游戏元素相同,CCTMXTileMap也继承自CCNode,因此可像层一样把它添加到游戏场景中。CCTMXLayer代表一个瓦片地图中的图层,可以从图层对象获取图层信息,如某一点是否存在对象组或属性。CCTMXLayer隶属于CCTMXTileMap,因此通常不需要我们手动管理图层。


此外,CCTMXTileMap还提供了一些操作地图的图层或地图对象的方法,可以通过关键字获取层、对象组或属性,这也为我们操作地图提供了便利。


看下例子代码:

        CCTMXTiledMap *mymap = CCTMXTiledMap::create("MyTextMap.tmx");
        bool isingore = mymap->isIgnoreAnchorPointForPosition();
        mymap->setAnchorPoint(ccp(0.5f, 0.5f));
        mymap->setPosition(ccp(winSize.width / 2.0f, winSize.height / 2.0f));
        this->addChild(mymap, 10);


你可能感兴趣的:(cocos2dx之瓦片地图)