格子地图
如同一块块砖瓦拼成的地板一样的地图,是由一张大图的资源文件和.tmx的描述文件组成的。创建格子地图如下(格子地图相当于节点):
TMXTiledMap* map= TMXTiledMap::create("TileMaps/orthogonal-test1.tmx");
addChild(map);
可以通过map->setScale(x,y) 缩放地图
如果图片大小大于块的定义大小,如何对齐?
TileMap将每个格子的锚点设置在了左下角,于是大于的部分会往上面和右面延展
如果地图上某个格子的精灵被我们一道别的地方时,格子的位置是不会变的,只是精灵的位置变了(格子精灵就是图片,格子就是位置)
TMXTiledMap类,有几个接口
TMXTiledMap::getContentSize 整个地图的尺寸,以像素为单位
TMXTiledMap::getMapSize 整个地图的尺寸,以地图块为单位,比如说地图由12x12块砖头组成,这个函数返回 Size(12,12)
TMXTiledMap::getTileSize 一个砖块的尺寸,以像素为单位,和获取图元大小方式不同,图元是getBoundingBox
地图层
TMXTiledMap是格子地图类 由TMXLayer组成,在TMXLayer中,有许多Tile(瓦片),Tile对应的是精灵。
TMXTiledMap至少包含一个图元文件,图元文件在地图中叫TileSet(图元就是png图(可能包含在.tsx中)),精灵使用的图片,由TileSet提供,TileSet每个块都对应有一个GroupID来标记
图层也会有编号,渲染时编号越低的越被先画出
地图的层次关系,在.tmx文件中会有详细说明,每层会有名字、宽高等信息(下面的乱码是经过加密的):
<layername="background"width="228"height="14">
<dataencoding="base64"compression="zlib"> eJzt07EJwDAQwEBD5rP3HydDfMAiXHG9Gu1nrQ184gzd7oc/8SN0+BE6/AgdfoQOP0KHH6HDj9DhR+jwI3T4ETr8CB1+hI7pjy8Tu+aO
</data>
</layer>
层的接口:
TMXLayer::getTileAt(pos)获取参数位置的精灵,注意这个pos以块为单位,要求pos的x和y必须是整数
TMXLayer::getTileGIDAt(pos)获取pos位置的瓦片gid(GID都是从1开始排的)
层的操作:
/* 获取层*/
TMXLayer* layer =map->getLayer("Layer0");
layer->setLocalZOrder(100);
/* 获取左下角精灵,注意地图格子的坐标体系是UI坐标体系(坐标原点在左上角) */
Sprite* sprite =layer->getTileAt(Vec2(0, 11)); //getTileAt返回一个精灵
必须注意的是,getTileAt中的坐标是格子坐标,(0,11)表示UI坐标下第1行第12块,是从0开始的。
getLayer中的参数就是在.tmx中定义好的层名字。
本文介绍了Cocos2d-x中的格子地图,包括如何创建和操作TMXTiledMap,以及地图层的概念。TMXTiledMap通过.tmx文件和资源文件组合而成,可以缩放,并提供了获取地图尺寸和格子大小的方法。地图层由TMXLayer组成,每个层包含多个Tile,TileSet用于提供精灵图片。TMXLayer提供了获取特定位置Tile的接口,如getTileAt和getTileGIDAt。地图的层次关系和渲染顺序在.tmx文件中定义,可通过调整本地Z顺序控制渲染顺序。
&spm=1001.2101.3001.5002&articleId=51168019&d=1&t=3&u=f8304699514146ecb51ceaddd4ab558c)
3975

被折叠的 条评论
为什么被折叠?



