Tiled地图文件分析

在Cocos2D-X引擎当中,开发者就是用此类TMX文件来实现背景地图的。读者可以使用Windows系统的文本编辑器打开保存的TMX项目文件。

代码6-1  地图保存文件内容

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE map SYSTEM "http://mapeditor.org/dtd/1.0/map.dtd">

<map version="1.0" orientation="isometric" width="10" height="10" tilewidth="64" tileheight= "32">

 <tileset firstgid="1" name="Untitled" tilewidth="64" tileheight="32">

  <image source="iso.png"/>

 </tileset>

 <layer name="Layer 0" width="10" height="10">

<!—地图拼接数据-->

  <data encoding="base64" compression="gzip">

   H4sIAAAAAAAAA2NkYGBgHMWDBgMAjw2X0pABAAA=

  </data>

 </layer>

<!—图层数据-->

 <layer name="Layer 1" width="10" height="10">

  <data encoding="base64" compression="gzip">

   H4sIAAAAAAAAA2NmwARMOOjhAJhwsJlxqMPmd2YkmgmHGmS1yOqwqWdGwgDg7sqJkAEAAA==

  </data>

 </layer>

 <layer name="Layer 2" width="10" height="10">

  <data encoding="base64" compression="gzip">

   H4sIAAAAAAAAA2NgGFqAGYqppW6wAQDMTJpEkAEAAA==

  </data>

 </layer>

 <objectgroup color="#001ca4" name="Object Group 1" width="0" height="0">

  <object name="platform 1" x="0" y="290" width="32" height="30"/>

  <object name="" x="0" y="3" width="31" height="32"/>

  <object name="" x="130" y="162" width="29" height="29"/>

  <object name="" x="290" y="290" width="28" height="29"/>

 </objectgroup>

</map>

上述代码是来自下面的文件。

\samples\TestCpp\Resources\TileMaps\iso-test-objectgroup.tmx

这正是刚刚读者拼接的游戏地图。此文件对应的正是图6-8中所展示的菱形砖块拼接地图。此数据文件是Tile Map Editor的工程文件,它使用了XML的数据保存格式。下面来看看此文件中每一行代码的内容。

文件中第一行,就说明了文件数据格式为XML1.0版本,同时文件使用了UTF-8的编码方式。第一行代码被开发者习惯称为文件头。它包含了文件的一些基本信息,是XML文件通用格式。从文件头的内容,我们可以确认Tiled Map Editor的存储项目文件为XML数据格式。这是一种在程序开发领域广泛应用的数据格式。

XML是eXtensible Markup Language的缩写,其含义为扩展标记语言。XML是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便地方式建立,虽然XML占用的空间比二进制数据占用更多的空间,但其具备很多的优点。

(1)XML极其简单,易于掌握和使用。XML最初用作互联网上的一种数据格式,其文件格式经常被开发者使用。XML文件格式简单,易于查看。它可以方便地被任何应用程序用来进行读写操作。XML很快成为数据交换的一种公共语言,逐渐成为了开发者的首选。

(2)XML数据格式应用非常广泛。比如在iOS系统当中也存在许多的XML格式文件,最为常见的就算InterfaceBuilder创建的布局文件。Android系统中也使用XML来保存应用程序的画面布局。除此之外,还有应用程序的配置文件、文本文件等等都采用了XML数据格式。由于XML的易用和普遍,越来越多应用软件都开始支持XML格式。XML数据格式也可以作为一种中间的转换格式。一些刚刚推出的软件,甚至只支持XML文件的格式,其他格式则需要进行转换。

(3)XML文件格式具备跨平台性。它可以更容易地在Windows、Mac OS、Linux以及其他平台下传递。由于XML格式支持多种文件编码的方式,在逐渐标准化的过程中XML数据格式也成为了不同平台之间传递数据的纽带。在任何平台开发者都可以很容易加载XML数据到程序中进行解析。同时,也可以使用XML格式来保存数据。由于上述的优点,在游戏制作中XML格式也是读者在今后的游戏开发工作中最经常听到和使用的一种数据格式。

文件头部第一行是XML文件格式的说明。第二行就是与游戏地图有关的内容了。在map的属性中,读者可以看到“isometric”的字段。这就说明了此地图是一个斜45度拼接的游戏背景。如果是一个正常视角地图的话,则此处会为“orthogonal”。再来看看<map>中其他的属性。这些都是读者熟悉的数值,只是现在以数据的方式展现出来。width(宽度)与height(高度)代表了地图创建时输入的尺寸大小。tileWidth(砖块宽度)和tileHeight(砖块高度)存储的正是读者在创建砖块元素时,输入的64像素 × 32像素的尺寸。

接下来的<tileset>段落,则保存了砖块元素所用的图片信息。其中包含多个属性:图片的序号、砖块元素的尺寸、间隔像素、图片文件的名称。聪明的读者此时就会联想到编辑器界面中砖块元素区域。此部分的数据正好对应这个区域。

在接下来的文件内容中存在三个基本图层信息:Layer 0、Layer 1和Layer 2,还有一个物体层信息:Object Group 1。图层信息的段落中包含了地图层的属性信息,其中包括了图层的名字、宽度、高度以及拼接数据。在拼接数据当中,并没有看到用逗号分隔的CSV数据格式,而是采用了base64的gzip压缩算法,这是为了节省地图拼接数据占用的存储空间。

注意:这并不是Cocos2D唯一支持的数据压缩方式,还可以采用zlib的方式。

虽然看上去是一段让人无法理解的密码,但是砖块地图拼接数据就存在这里。其实数据内容并未有任何的改变,只是为了节省空间进行了压缩。

在文件的最后部分就是物体层的信息。这算是此地图中比较特殊的内容。从数据来看,在物体层中总共存在四个对象。第一个对象的名字叫做“platform1”,其他三个都是无名氏。它们的属性当中包含了一个矩形区域的四个数据属性,分别是x、y坐标以及宽度、高度。这就是设计人员在编辑器创建对象的范围。

以上内容,已经为读者介绍了TMX文件中每一行代码。但是示例的文件中缺少了一个编辑器的功能,不知读者是否有所发现?在前面介绍的过程中,曾提到了编辑器中一种灵活的功能,它能够让开发者自由地定义数据。这就是属性配置。在编辑器中,设计人员可以为地图、砖块元素以及对象物体添加属性。这一点并没有在上述代码中体现出来。因此接下来,为读者补充另一个TMX文件,见下面的代码6-2。

代码6-2  对象中的自定义属性

<?xml version="1.0" encoding="UTF-8"?>

<map version="1.0" orientation="orthogonal" width="32" height="32" tilewidth="32" tileheight= "32">

 <tileset firstgid="1" name="tiles" tilewidth="32" tileheight="32" spacing="2" margin="2">

  <image source="fixed-ortho-test2.png" width="640" height="400"/>

 </tileset>

 <layer name="Layer 0" width="32" height="32">

  <data encoding="base64" compression="zlib">

   eJztw7EJACAMALAK4mP+/5OjUFwcdNAEEgEAAPCHmt7WU6a2+Jqy8YQBBPEBRg==

  </data>

 </layer>

<!—物体层数据-->

 <objectgroup color="#ffffff" name="Object Group 1" width="0" height="0">

  <object name="Object" x="0" y="992" width="352" height="32"/>

  <object name="Object" x="224" y="928" width="160" height="32"/>

  <object name="platform" type="platform" x="2" y="833" width="125" height="60">

   <properties>

    <property name="friction" value="1.0"/>

   </properties>

  </object>

  <object gid="38" x="181" y="818"/>

  <object gid="38" x="155" y="763"/>

  <object x="693" y="891">

   <polygon points="0,0 217,93 215,-96 43,-182"/>

  </object>

  <object x="469" y="783">

   <polyline points="0,0 -51,130 145,173 136,16 40,88"/>

  </object>

 </objectgroup>

</map>

上述文件来自Cocos2D-X引擎中的文件。

Cocos2D-X\samples\TestCpp\Resources\TileMaps\ortho-objects.tmx

从文件头部的属性,我们可以知道此地图的拼接方式为“orthogonal”。这就是最传统的矩形砖块拼接方式。读者可以借助此段代码,回顾一下对TMX格式的理解。文件中间部分的内容则直接跳过。没有新的知识,读者还是自己来熟悉吧。数据文件中新增的内容是与对象物体属性有关的段落。

在对象platform中,可以看到在图6-11中所展示的摩擦力属性,其数值为1.0。在此地图数据中存在了七个对象物体,其中只有一个配有属性,另外有两个为图片对象物体。Cocos2D-X引擎为开发者提供了上述所有数据的函数接口。现在已经万事俱备,就剩下最后一步了,那就是将拼接地图数据利用Cocos2D-X引擎来实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值