一、基本功能
1、图块:
建议镶入地图,这样使用时不用管加载图块的路径问题。
图块可以编辑属性
注意:编辑器里图块id从0开始,但是代码里获取属性的方法,id是从1开始的
单个图块可以编辑自定义属性、地形和碰撞区域(为一个对象,后面详细说明)
,自定义地形:把某个地形的边角都圈出来,绘制地图的时候可以用地形来整体刷
图块碰撞编辑,可以自定义碰撞区域,但是这区域导出会导出为对象,获取属性获取不到,需要对这个区域再定义属性的名字等参数,获取的时候需要通过tilemap的getObjectGroup去获取(跟图块就绑定不上了,需要自己通过名称或者别的东西去绑定。可以理解为单独创建了一个对象)
2、层和对象组
层:画地图,也可以把层分类去做处理,比如河流和地板分开,墙和路分开,便于代码里使用。(个人感觉也可以用图块的属性来实现这些功能)
【图层里图块的位置如图,在代码里获取图块的时候是这样对应的 GroundLayer:getTileAt(cc.p(1,0))。】
【单个图块的锚点在左下脚,图层的锚点也是左下脚】
对象组:跟操作相关的一些功能,比如设置出生点,怪物产生的点等,甚至一些移动的线路图之类的
对象也可以定义属性和和形状
3、地图属性
图块层格式默认是base64 zlib压缩的,意思是把图块层的数据先用zlib压缩了一下,然后用base64编码了,正常导出后只能看到个data。选择xml的格式的话导出是能看到图块层的具体数据的。
导出时可以选择导出成各种格式。【有个预感是导出成lua格式,然后知道图层的数据,是不是就可以自己写渲染了,实现分块加载、滑动到哪里就渲染哪里。(正常是一次性渲染,地图很大的时候,glverts很高)】【经测试证明,并没有卡。。。这个跟图块的种类数有关,虽然节点数很多,但是在渲染的时候图块一次性加载进去(类似图集),不用一直切换图片,所以glcalls还是很低的,加载滑动都挺正常,当有两种图块集的时候建议分两层去绘制,每个层只用一种】
GroundLayer:getTileAt(cc.p(1,0))4、上代码
创建 local tilemap = cc.TMXTiledMap:create(tilemapURl)
获取对象层 local objects = tilemap:getObjectGroup("objects")
获取对象 local burnPos = objects:getObject("burnPos")
获取层 local GroundLayer = tilemap:getLayer("Ground")
关键源码:TMXTiledMap TMXLayer CCTMXXMLParser
网友评论