cocos2d-瓷砖地图格式
来源:互联网 发布:vr相机软件 编辑:程序博客网 时间:2024/04/28 02:37
<?xml version="1.0" encoding="UTF-8"?> <map version="1.0" orientation="orthogonal" width="40" height="40" tilewidth="32" tileheight="32"> <tileset firstgid="1" name="Desert" tilewidth="32" tileheight="32" spacing="3" margin="2"> <image source="desert_tiled.png" width="281" height="211"/> <tile id="30"> <properties> <property name="cactus" value="true"/> </properties> </tile> </tileset> <layer name="Ground" width="40" height="40"> <data encoding="base64" compression="gzip"> H4sIAAAAAAAAA+2YaQvCMAyGo37wAk/wRJ3OY97+/19nxJVJKF3WrbHKPjzYQVcf30QXXALA0iEdpIv0cp5TQapIjbnmnHnT+K0s/ZpIC2kz19L59ZEBMmSuOWe+shohY2SS088Vup6wrXEaU2SWgTnY9YQta2STgdChX2Tw2yInZPdFP1N+ITNPCb+9h34P4kX9LvDu/6uwH+05ep2WF+3LIvx034OI5KfWaX4016LyO5Br5ZM1P9f1pZ6UY1w/LucC/OoxDUieRSZqzH2KRU6/LiTzhfqsJtrMfbr7bPzGkMwXaj4xMWTu093nsvekCUA/5/jkGQj62MxmEl63+JXz2/n5/AkLen8uHL+X0yPeK+l399CP9rVvfjb1/ZwvpPzuGfxolr7lp6u1z36S+dnMZpJ+/0LggcOvQLNy9b9RWeOSku/wBLyVlw4AGQAA </data> </layer> </map>
TMX Map Format
TMX地图格式是Tiled编辑器采用的一种灵活的基于瓦片的地图描述格式。用它来描述的地图有以下特点:任意数量的图块,任意数量的层(layer),任意数量的图块集(tile sets)还有附加于这些元素(elements)之上的用户自定义属性。除了layer以外,它也提供了可以自由放置的对象组(Objects Group)。
在这篇文档中我们将全面的了解TMX格式的所有元素。每个元素都将以标题的形式列出,然后是该元素支持的属性及该属性的一段简要说明,当前版本的Tiled 编辑器所不支持的属性将以斜体的形式出现在属性列表中。
<map>
- version: TMX格式版本号,一般为1.0
- orientation:地图朝向,目前支持“正交”(orthogonal)和“45度等距”(isometric)两种方式。
- width: 地图的宽度(tile个数isometric则是斜边的tile个数)
- height: 地图的高度(tile个数)
- tilewidth: 单Tile的宽度
- tileheight: 单Tile的高度
tilewidth与tileheight两个属性决定了地图网格的大小,个别tiles允许有不同的大小,所有的Tile将靠挂在左下角,超出的部分将在顶部和右侧延伸。
可以包含下列元素:属性,图块集,层,对象组( properties, tileset, layer, objectgroup)
<tileset>
- firstgid: The first global tile ID of this tileset (this global ID maps to the first tile in this tileset).
此图块集的第一个图块在全局图块集中的位置。
- source: 图像来源:如果此图块集来自于一个外部图块定义文件,此属性的值为该图块定义文件路径。TSX文件同样拥有相同的属性结构。在TSX文件中没有firstgid与source属性,如果这个图块集定义文件中的图块在地图中被使用,这两个属性将在TMX文件之中被设置。
- name: 图块集的名称
- tilewidth: 图块集的宽度
- tileheight: 图块集的高度
- spacing: 图块集中图块的间距,在原图上采样图块时,图块与图块之间的间隔
- margin: 图块集中图块的边距,在原图上采样图块时,图像左侧与上方采样的剔除边界大小
<image>
- format: 嵌入图片时所使用的格式,TiledQT版本当前不支持此属性。
- id: 在Tiled Java的某些版本中被使用,TiledQT版本当前不支持此属性。
- source: 图块集对应图像文件的路径。(Tiled支持大多数常见图像格式:bmp,gif,jpeg,jpg,pbm,pgm,png,ppm,tif,tiff,xbm,xpm)
- trans:定义一种用于表示透过的颜色,比如value: "FF00FF" for magenta(品红色)
- width: 图像的宽度
- height: 图像的高度
当前版本的Tiled QT版本,每个图片集与一张图像对应,按照图片集的属性将该图像切割为多个较小的图块。QT后续开发计划将在一个图片集中支持多个图像,如同JAVA版本的Tiled提供的功能。
<tile>
- id: 图块集内部的图块编号
<layer>
- name: 图层的名称
- x: 该层的X坐标(单位为图块)。默认为0,该值在QT版本的Tiled编辑器中不允许修改。
- y: 该层的Y坐标(单位为图块)。默认为0,该值在QT版本的Tiled编辑器中不允许修改。
- width: 该层的宽度(单位为图块)。历史版本要求存在,该值在QT版本的Tiled编辑器中与地图的宽度相同。
- height:该层的高度(单位为图块)。历史版本要求存在,该值在QT版本的Tiled编辑器中与地图的高度相同。
- opacity: 不透明度(opacity) ,范围0~1,0为全透,1为不透。
- visible: 是否可见,1可见,0不可见,默认值为1。
<data>
- encoding: 图层数据的编码方式,当前提供两种“base64”和“csv”
Base64是一种通用的方法,其原理很简单,就是把三个Byte的数据用4个Byte表示。在这四个Byte中,实际用到的都只有前面6bit,这样就不存在只能传输7bit的字符的问题了。Base64的缩写一般是“B”。
CSV逗号分隔值文件(COMMA Separated value),是一种用来存储数据的纯文本文件格式。
- compression: 图层数据的压缩方式,QT版本的Tiled编辑器支持gzip或者zlib方式的数据压缩。
如果数据为本进行编码转换和压缩的情况下,图块数据将被作为XML的子元素来存储,这是最容易解析的数据格式。
采用base64编码格式的数据和压缩过后的数据解析起来较为复杂。首先你必须对数据进行解码,然后你可能需要加压缩数据。你的数据存储于一个字节数组,你不得不将它排序为一个little-endian字节序的无符号整形数组。
无论采用哪种格式存储你的图层数据,你都必须以所谓的gids作为结尾。它们是全局的,自从图块集的任意图块被用于设计当前地图。为了能够找到图块所在的图块集,你需要找到小于图块gid的最大的图块集的firstgid。所有图块集的firstgids都是按顺序排列的。
C++伪代码:
// Bits on the far end of the 32-bit global tile ID are used for tile flagsconst unsigned FLIPPED_HORIZONTALLY_FLAG = 0x80000000;const unsigned FLIPPED_VERTICALLY_FLAG = 0x40000000;const unsigned FLIPPED_DIAGONALLY_FLAG = 0x20000000;...// Extract the contents of the <data> elementstring tile_data = ...unsigned char *data = decompress(base64_decode(tile_data));unsigned tile_index = 0;// Here you should check that the data has the right size// (map_width * map_height * 4)for (int y = 0; y < map_height; ++y) { for (int x = 0; x < map_width; ++x) { unsigned global_tile_id = data[tile_index] | data[tile_index + 1] << 8 | data[tile_index + 2] << 16 | data[tile_index + 3] << 24; tile_index += 4; // Read out the flags bool flipped_horizontally = (global_tile_id & FLIPPED_HORIZONTALLY_FLAG); bool flipped_vertically = (global_tile_id & FLIPPED_VERTICALLY_FLAG); bool flipped_diagonally = (global_tile_id & FLIPPED_DIAGONALLY_FLAG); // Clear the flags global_tile_id &= ~(FLIPPED_HORIZONTALLY_FLAG | FLIPPED_VERTICALLY_FLAG | FLIPPED_DIAGONALLY_FLAG); // Resolve the tile for (int i = tileset_count - 1; i >= 0; --i) { Tileset *tileset = tilesets[i]; if (tileset->first_gid() <= global_tile_id) { tiles[y][x] = tileset->tileAt(global_tile_id - tileset->first_gid()); break; } } }}
<tile>
- gid: 图块的全局ID
图块不一定要处于图块集中,也可以单独存在于层中,这个元素定义了可用于图层的一个基本图块。这是最没有效率的层数据存储方式,通常应该避免。
<objectgroup>
- name: 对象组的名称。
- color: 当前对象组的颜色。
- x: 对象组的X坐标。默认为0,TiledQT版本此属性无法修改。
- y: 对象组的Y坐标。默认为0,TiledQT版本此属性无法修改。
- width: 对象组的宽度,当前无意义。
- height: 对象组的高度,当前无意义。
- opacity: 对象组的图透明度0~1,默认为1不透。
- visible:对象组的可见性 1显示 0隐藏,默认为1。
对象组事实上就是一个图层,因此在TiledQt版本中我们也称之为对象层。
<object>
- name: 对象名称。字符串表示
- type: 对象类型。字符串表示
- x: 对象的X坐标,单位像素
- y: 对象的Y坐标,单位像素
- width:对象的宽度,单位像素
- height: 对象的高度,单位像素
- gid: 图块的索引(可选)
- visible: 可见性,1显示0隐藏,默认为1
虽然块状图层非常适合用来把所有的物件对齐到网格,但有时你需要在地图中添加一些不需要对齐到网格的信息。因此对象的位置、大小单位为像素,如果你想要对齐对象到网格也很容易。通常你用对象来添加一些自定义信息,例如出生点,跳转点,退出点等等。
如果某个对象的gid属性被设置,对象将用该ID对应的图块来表示,也就是说该对象的宽度和高度信息是被忽略的。图片的对齐方式取决于当前地图的朝向。在正交地图中,于左下角对齐,在等距地图中于底部中心对齐。
<polygon>
- points:一系列X,Z坐标点(单位像素)
多边形对象由一系列空格符分隔的坐标点组成。这些坐标点的原点是父对象的位置。默认情况下,第一个点的坐标为0,0 指示对象的存放位置。
<polyline>
- points: 一系列X,Z坐标点(单位像素)
规则如同多边形。
<properties>
可以包含任意数量的自定义属性。可以用来作为地图,图块,层,对象组,对象的子元素。
<property>
- name: 属性名
- value: 属性值
如果属性值中包含换行符,当前JAVA和QT版本的Tiled编辑器的处理方法是将其包含在property元素中而非value值,当前Tiled编辑器并没有真正意义上支持多行属性值。也许在将在的版本中属性值将直接存储于元素中而非作为一个attribute存储。
原文地址:https://github.com/bjorn/tiled/wiki/TMX-Map-Format
<本节完>
- cocos2d-瓷砖地图格式
- 【cocos2d-x】瓷砖地图(TileMap)基础知识
- cocos2d - 地图
- cocos2d 加载地图总结
- cocos2d - 地图 CCTMXTiledMap
- cocos2d游戏地图
- cocos2d-地图滚动
- cocos2d-x瓦片地图
- Cocos2d-x大型地图
- COCOS2D 地图移动
- TMX地图格式
- (译)TMX地图格式
- TMX地图格式
- cocos2d 像素格式
- cocos2d纹理像素格式
- cocos2d纹理像素格式
- cocos2d-android 使用tile地图
- cocos2d from python 瓦片地图
- 设备驱动-----2.Linux内核模块-Makefile解析
- 学习PHP基础条件语句
- Happiness Hotel 数论 佩尔方程
- PHP5.5 将会带来哪些新特征
- English Game 字典树排序 字符串处理
- cocos2d-瓷砖地图格式
- 实验五 Linux操作系统是如何工作的?
- 用Bat命令重启Explorer
- Friends number 数论 打表
- 尝试SQL Server 2014 OLTP memory-optimized表遇到的问题
- 学习Spring框架系列(四):IoC和AOP的应用——事务配置
- DatabaseMetaData之获取数据库所有表
- 读《穷爸爸与富爸爸》引发的思考
- Android http 多线程下载心得