在cocos2dx3.0中用lua脚本导入tiledmap瓦片地图

*cocos2dx引擎版本为3.1


由于管网上的教程是C++的,这里补充一下lua版本的写法,如果有错误欢迎留言指正,感谢阅读。

瓦片地图的制作主要参考了以下教程:《如何使用cocos2dx3.0制作基于tilemap的游戏》和官方wikiTiled map


首先,做好一张地图后,将它导入并添加到layer中:


    local layer = cc.Layer:create()
    --create a TMX map
    local map = cc.TMXTiledMap:create("res/maps/ortho-rotation-test.tmx")
    layer:addChild(map,0,kTagTileMap)
    --打开抗锯齿
    local children = map:getChildren()
    for k, child in ipairs(children) do
        child:getTexture():setAntiAliasTexParameters()
    end

关于阻挡:

在地图中增加一个专门设置阻挡的层,然后涂上不同的图块并设置属性值,这是通用的办法。由于我没有专门做出跟当前使用的大小一致的图块,因此偷了个懒,直接在地图上部分区域涂了一些树,然后设置树图块的属性值collidable=True。


接下来在lua中读取属性值,注意要先取到对应的层,再取某个图块读属性:


    local map_layer = map:getLayer("trees")
    local git = map_layer:getTileGIDAt(cc.p(0,10))
    local properties = map:getPropertiesForGID(git)
    print (tostring(properties.collidable))

这里要注意,

1. 假如这个阻挡层的某个块是空的,那么获取到的git将等于0,后面的读取属性也会出错。

2. 如果读取到的块有图片,但是没有设置任何属性值,那么获取到的properties是nil

3. 如果成功读取,将拿到一个属性值table,直接读内容就可以,无需像C++代码那样转换


在这之后,读取对象层中的对象的代码如下:(虽然觉得对象好像没什么太大用处)


    local  group = map:getObjectGroup("player")
    local  objects = group:getObjects()
    local  player_object = group:getObject("playerObject")
    for key,value in pairs(player_object) do
        print(key, value)
    end


拿到的object是个普通的table,里面的内容有:

x 49
 y 197
 width 11
 height 11
 name playerObject

可以直接使用x,y坐标值。


关于镜头移动和坐标的计算,可以参考这篇文章使用TileMap制作游戏地图,在cocos2d-x中使用(一) 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值