一、元素解析
1. map地图信息
<map version="1.0" tiledversion="1.1.6"
orientation="orthogonal"
renderorder="right-down"
width="13" height="13"
tilewidth="32" tileheight="32"
infinite="0"
nextobjectid="9">
orientation:地图视角
renderorder:地图坐标方向
width与height:多少个图块
tilewidth和tileheight:一个图块的大小
2. tileset图块信息
<tileset firstgid="3" name="enemy"
tilewidth="32" tileheight="32"
tilecount="256" columns="4">
<image source="enemy.png" width="128" height="2048"/>
</tileset>
firstgid:第一个图块的ID,每一个图块都有单独的ID,后面的图块ID依次加1,让图层里的元素引用
tilecount:在图块集合里所有图块的数量
columns:图块列数
image source:引用的原图片
3. layer图块层信息
<layer name="floor" width="13" height="13">
<data encoding="base64" compression="gzip">
H4sIAAAAAAAAE2NkYGBgHMWjeBBjANKfHWSkAgAA
</data>
</layer>
这里主要看下data数据,先进行了gzip压缩,然后进行base64加密,在扩展知识里详细解释
4. 对象层信息
<objectgroup name="object">
<object id="1" name="npc0" type="npc" x="128" y="320" width="32" height="32">
<properties>
<property name="image" value="npc.png"/>
<property name="rectX" value="0"/>
<property name="rectY" value="0"/>
</properties>
</object>
<object id="2" type="teleport" x="192" y="32" width="32" height="32">
<properties>
<property name="heroTileCoordX" value="2"/>
<property name="heroTileCoordY" value="11"/>
<property name="image" value="down_floor.png"/>
<property name="targetMap" value="0"/>
</properties>
</object>
</objectgroup>
注意对象的x,y是每一个图块的宽高*该图块所在的位置
property:对象的属性,这里可以按照需求无限扩展
二、扩展知识
1. 什么是base64?
Base64一般用于在HTTP协议下传输二进制数据,由于HTTP协议是文本协议,所以在HTTP协议下传输二进制数据需要将二进制数据转换为字符数据。然而直接转换是不行的。因为网络传输只能传输可打印字符。什么是可打印字符?在ASCII码中规定,0~31、128这33个字符属于控制字符,32~127这95个字符属于可打印字符,也就是说网络传输只能传输这95个字符,不在这个范围内的字符无法传输。那么该怎么才能传输其他字符呢?其中一种方式就是使用Base64。
Base64的原理其实很简单,首先,需要准备一个包含64个字符的表格,0~63分别对应了唯一一个字符,比如18对应的是S。
然后,对二进制数据进行处理,每3个字节一组,一共3x8=24bit,将这24bit划分为4组,每组正好6个bit,6bit的数据刚好可以表示0~63的范围,也就可以对应上表的64个字符。这样我们就得到了4个数字作为索引,然后查表获得相应的4个字符,就得到了编码后的字符串。
(1) 字符串”Ow!”被拆分成3个8位的字节(0x4F、0x77、0x21)。
(2) 这3个字节构成了一个24位的二进制01001111 01110111 00100001。
(3) 这些被划分为一些6位的序列010011、110111、011100、1000001.
(4) 每个6位值都表示了从0~63之间的数字,对应base64字母表中的64个字符之一。得到的base64编码字符串是4个字符的字符串“T3ch”。然后就可以通过线路将这个字符串作为“安全的”8位字符传送出去,因为只用了一些移植性最好的字符(字母、数字等)。
2. gzip
减少文件大小有两个明显的好处,一是可以减少存储空间,二是通过网络传输文件时,可以减少传输的时间。gzip 是在 Linux 系统中经常使用的一个对文件进行压缩和解压缩的命令,既方便又好用。