学习cocos2d-x没有好的学习方法,直接做项目,看效果。不看原理,不分析源码。我才明白都是在培训学校养成的坏习惯~
辛辛苦苦地在项目中用了TMLMap,现在回头看看,有人写过这么好的基础知识的介绍,哎,如果当时看了这些基础,那效率肯定很快了~
现在在看这些权当复习吧,总结吧。我表达能力欠佳,想说的都在这了~
6.6.1 砖块地图类CCTMXTiledMap(1)
Cocos2D-X引擎专门设计了一个类用来读取与解析TMX文件。此TMX文件就是前面列举的Tile Map Editor项目工程文件,其中包含了地图拼接数据。引擎当中对应的类,就是类CCTMXTiledMap。它继承自CCNode基类。此类为开发者提供了两个静态的创建函数。
1. //根据一个TMX文件来创建一个背景地图
2. static CCTMXTiledMap * create (const char *tmxFile)
3. //根据一个TMX文件以及资源路径,来创建一个背景地图
4. static CCTMXTiledMap * create (const char *tmxString, const char *resourcePath)
上面的两个函数并有太大的区别。因为拼接地图所用的图片资源信息也同样保存在TMX文件当中,所以在代码中,开发者更习惯只有一个参数的简洁函数。根据引擎的说明文档,类CCTMXTiledMap提供了对TMX文件的解析以及如何绘制的功能。所谓的解析,就是能够将TMX文件中的地图信息,加载为引擎可用的对象。至于如何绘制,就是在内存当中将拼图信息以游戏画面组成方式保存。类CCTMXTiledMap几乎支持Tile Map Editor中所有的功能。它能够支持三种矩形、菱形、正六边形的拼接方式。同时,还支持物体层、物体以及属性功能。下面列出了类CCTMXTiledMap具体的实现技术。
每个砖块元素都会被当作精灵对象来处理。
每个地图中的砖块,只有在需要的时候才会被创建。这是为了节省内存的开销。只有在开发者调用类CCLayer的函数tileAt之后,砖块对象才会被创建。
每一个砖块元素都支持旋转、移动、伸缩、变色以及更改透明度。这正是将砖块元素视为精灵对象而获得的自由。
在引擎运行当中,开发者也可以删除或者添加砖块元素。
砖块的z坐标,用于控制图块之间的遮挡关系。它也是可以在引擎运行期间修改的。
每一个砖块都存在锚点。它是绘制时用于对齐的坐标点,默认为(0,0)。
每个地图对象也同样存在锚点,默认为(0,0)。
每一个TMX中的图层都会成为地图对象的子节点。
每一个图层都将使用纹理图片集合的处理方式。
地图中砖块元素的纹理图片将会被加载在CCTextureCache当中。
每一个砖块元素都有一个唯一的标志数值。
每一个砖块元素也拥有一个唯一的Z坐标值。此坐标从左上角开始,数值为"1",到右下角最大值截止。
每一个物体层中的对象都将会被放置在一个动态数组当中。
对象的所有属性将会保存在一个字典容器当中。
引擎中支持所有Tile Map对象的属性:
地图、(CCTMXTiledMap:publicCCNode)
图层、(CCTMXLayer:publicCCSpriteBatchNode)
物体层(CCTMXObjectGroup:publicCCObject)
以及对象。
除了上面支持的功能,读者更应该注意下面TMX文件的使用限制。
当前的版本仅支持一个图层对应一个图块纹理图片的方式。
不支持嵌入式的纹理图片。
仅支持XML格式的导出文件,不支持JSON格式的文件。