您的位置:首页 > 移动开发 > Cocos引擎

Cocos格子地图(1)

2016-04-16 14:39 1141 查看

格子地图

如同一块块砖瓦拼成的地板一样的地图,是由一张大图的资源文件和.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中定义好的层名字。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: