TiledMap使用教程
发表于2019-03-20
本篇文章给大家介绍下关于TiledMap的使用教程,并借助一个案例来帮助大家加深了解。
块大小可结合图片资源来设置,地图大小结合块大小和像素大小来设置。
新建完成后如下,右边默认图层名字为块层1,可更改图层的名字:
图层定义:
用于分隔不同作用的地图元素以方便管理和实现层叠显示。举例跑酷的场景中可以将地面、背景建筑、碰撞物体等分层放置,对于背景只是用来增加画面效果不会用于判断碰撞等事件,墙壁等瓦片图如果不能充满整个图块就会造成颜色不协调(同一个图块位置无法放置两种不同的瓦片图),所以层的出现解决了这个棘手的问题,保证了背景可以存在上面又能用墙壁等瓦片图遮挡显示一部分图片。图层主要放置不会改变的图片,如地面或墙壁等。
二、导入图块资源:
三、图块层布局:
导入之后,就可以直接在右下角选中图块资源,放到图层上布局就可以了,背景布置完毕:
接下来,要加入小鸟、飞船等障碍物,爱心奖励物,可这些在游戏中是动态的,如果直接加入图片就不能动了,所以这些不能直接加入图块层,而是新建对象层:
四、添加对象层:
对象层概念:
主要用于放置NPC、金币、主角、宝箱、障碍物等,该类特点是经常会移动、变换形态、显示或隐藏等。另外对于我们自定义的一些选框、路径等也可以放在此层中。它并不对应于某个地图图片,只是标明了某个位置,这样开发者可以通过相关 API 获取某个对象的位置,从而在相应的位置进行绘制。对象也是可以有名字的,这样可以通过相关 API 通过名字得到对象。
例:新增了4个对象层,在对象层中添加了一些形状的对象,用这些对象来表示该位置上对应的障碍物或奖励品,也就是暂时用这些小方块小圆圈来代替具体的游戏实物。在程序中,我们可以遍历指定对象层上的全部对象,然后再在这些对象的坐标处创建相应的障碍物或奖励品,这样不管是它们是静态的还是动态的,都可以很方便的。这里形状和大小并无太大关系,因为我们在程序中只需要取对象的坐标值。
五、导出文件:
保存,并连同图块资源一起拷贝到项目的res/image目录下,用于游戏加载。注意的是。tmx文件与。png资源默认情况下需要放在同级目录下,如需修改,可以打开。tmx文件修改路径。 对象组(ObjectGroups)中的对象(Object)在TMX文件中以键值对的形式存在,因此我们也可以直接在TMX文件中对它进行修改。
六、游戏加载:
self.map = cc.TMXTiledMap:create("image/test.tmx") :align(display.BOTTOM_LEFT, display.left, display.bottom) :addTo(self, -1) self:addBody("heart", Heart) self:addBody("airship", Airship) self:addBody("bird", Bird) function BackgroundLayer:addBody(objectGroupName, class) local objects = self.map:getObjectGroup(objectGroupName):getObjects() local dict = nil local i = 0 local len = table.getn(objects) for i = 0, len-1, 1 do dict = objects[i + 1] if dict == nil then break end local key = "x" local x = dict["x"] key = "y" local y = dict["y"] local sprite = class.new(x, y) self.map:addChild(sprite) if objectGroupName == "bird" then table.insert(self.bird, sprite) end end end
游戏运行后,小鸟,爱心,飞船就可以按TiledMap设计好的位置出现了:
以上就是TiledMap的使用教程, 想了解更多内容,可以参考《瓦片地图 Tiled Map》