TiledMap简单使用

文章转载自:https://blog.csdn.net/Super_Cola/article/details/81084506

官网下载地址 
http://www.mapeditor.org/ 

官方文档
http://doc.mapeditor.org/ 

参考的文章 
http://blog.csdn.net/zhy_cheng/article/details/8308609 
http://blog.csdn.net/zhy_cheng/article/details/8316277 
http://blog.csdn.net/zhy_cheng/article/details/8363028 

关东升  http://blog.csdn.net/tonny_guan/article/details/39324041 
泰然网1 http://www.taikr.com/article/1924 
泰然网2 http://www.tairan.com/archives/7122/ 
Github  https://github.com/chukong/cocos-docs/blob/master/tutorial/framework/native/how-to-make-a-tile-based-game-with-cocos2d/part1/zh.md 

图片素材网址 http://www.2gei.com/rpg-marker/map/pn3/ 

 

示例:

一》打开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设计好的位置出现了:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值