*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
x 49
y 197
width 11
height 11
name playerObject
可以直接使用x,y坐标值。
关于镜头移动和坐标的计算,可以参考这篇文章使用TileMap制作游戏地图,在cocos2d-x中使用(一)