Cocos格子地图(1)

本文介绍了Cocos2d-x中的格子地图,包括如何创建和操作TMXTiledMap,以及地图层的概念。TMXTiledMap通过.tmx文件和资源文件组合而成,可以缩放,并提供了获取地图尺寸和格子大小的方法。地图层由TMXLayer组成,每个层包含多个Tile,TileSet用于提供精灵图片。TMXLayer提供了获取特定位置Tile的接口,如getTileAt和getTileGIDAt。地图的层次关系和渲染顺序在.tmx文件中定义,可通过调整本地Z顺序控制渲染顺序。

格子地图

如同一块块砖瓦拼成的地板一样的地图,是由一张大图的资源文件和.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中定义好的层名字。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值