Cocos2d-X研究之v3.x瓦片地图具体解释
2014-09-03 21:38
375 查看
在游戏开发过程中,我们会遇到超过屏幕大小的地图,比如即时战略游戏,使得玩家能够在地图中滚动游戏画面。这类游戏一般会有丰富的背景元素,假设直接使用背景图切换的方式,须要为每一个不同的场景准备一张背景图,并且每一个背景图都不小,这样会造成资源浪费。
瓦片地图就是为了解决这问题而产生的。一张大的世界地图或者背景图能够由几种地形来表示,每种地形相应一张小的的图片,我们称这些小的地形图片为瓦片。把这些瓦片拼接在一起,一个完整的地图就组合出来了,这就是瓦片地图的原理。
怎样使用Tiled工具建立地图能够參考下面文章:
怎样使用cocos2dx3.0制作基于tilemap的游戏
瓦片素材组与其它图片不能混合使用
仅仅有瓦片素材图能被导入TMX文件
每一个Layer最多支持1套瓦片素材组。
每个瓦片层仅仅能由一种瓦片素材组成
每个瓦片层能够被TMXLayer类表示-为SpriteSheet的子类
每个单一的瓦片被Sprite表示-父节点为TMXLayer
用来加入除背景以外的游戏元素-道具、障碍物等
对象组中的对象在TMX文件里以键值对形式存在,因此能够直接在TMX文件里对他进行改动
(0, 0): 左上角
(15, 15): 右下角
遍历子节点
获取/删除一个瓦片
遍历对象层中对象
瓦片地图就是为了解决这问题而产生的。一张大的世界地图或者背景图能够由几种地形来表示,每种地形相应一张小的的图片,我们称这些小的地形图片为瓦片。把这些瓦片拼接在一起,一个完整的地图就组合出来了,这就是瓦片地图的原理。
TileMap方案
在Cocos2d-x中,瓦片地图实现的是TileMap方案,TileMap要求每一个瓦片占领地图上一个四边形或六边形的区域。把不同的瓦片拼接在一起,就能够组成完整的地图了。我们须要非常多较小的纹理来创建瓦片。通常我们会将这些较小的纹理放图一张图片中,这样做会提高画图性能。瓦片地图编辑器
Cocos2d-x支持由瓦片地图编辑器Tiled Map Editor制作并保存为TMX格式的地图。Tiled Map Editor是一个开源项目,支持Windows、Linux及Mac OS X多个操作系统,我们能够从官网下载到编辑器的Java和QT版本号。怎样使用Tiled工具建立地图能够參考下面文章:
怎样使用cocos2dx3.0制作基于tilemap的游戏
地图方向
Tiled地图支持直角俯视地图(90°地图)、等距斜视地图(斜45°地图)和六边形地图,不支持左右或上下边界的六边形地图。地图资源
建议瓦片地图素材大小为32*32的倍数瓦片素材组与其它图片不能混合使用
仅仅有瓦片素材图能被导入TMX文件
每一个Layer最多支持1套瓦片素材组。
瓦片层
TMX文件里瓦片层的数量没有上限每个瓦片层仅仅能由一种瓦片素材组成
每个瓦片层能够被TMXLayer类表示-为SpriteSheet的子类
每个单一的瓦片被Sprite表示-父节点为TMXLayer
对象层
瓦片地图支持对象组用来加入除背景以外的游戏元素-道具、障碍物等
对象组中的对象在TMX文件里以键值对形式存在,因此能够直接在TMX文件里对他进行改动
瓦片地图坐标系
对于一个16*16的瓦片地图文件的坐标系统为(0, 0): 左上角
(15, 15): 右下角
在Cocos2d-x中使用TMX
创建TMX节点
1 2 | TMXTiledMap *map = TMXTiledMap::create("bg.tmx"); addChild(map, 0); |
1 2 3 4 5 6 7 8 9 10 11 | Vector pChildrenArray = map->getChildren(); SpriteBatchNode* child = NULL; Ref* pObject = NULL; for (Vector::iterator it = pChildrenArray.begin(); it != pChildrenArray.end(); it++) { pObject = *it; child = (SpriteBatchNode*)pObject; } |
1 2 3 | TMXLayer* layer = map->getLayer("layer0"); Sprite* tile0 = layer->getTileAt(Point(1, 15)); layer->removeTileAt(Point(1, 15)); |
1 2 3 4 5 6 7 8 | TMXObjectGroup* objectGroup = map->getObjectGroup("center"); ValueVector object = objectGroup->getObjects(); for (ValueVector::iterator it = object.begin(); it != object.end(); it++) { Value obj = *it; ValueMap map = obj.asValueMap(); log("x = %d y = %d", map.at("x").asInt(), map.at("y").asInt()); } |
相关文章推荐
- Cocos2d-X研究之v3.x瓦片地图详解
- Cocos2d-X研究之v3.x 事件分发机制具体解释
- cocos2d-x 旅程開始--(实现瓦片地图中的碰撞检測)
- Cocos2d-x使用瓦片地图
- 忍者无敌-实例讲解Cocos2d-x瓦片地图
- cocos2d-x 瓦片地图CCTMXTiledMap和图层类CCTMXLayer
- 「cocos2d-x」之直角瓦片地图学习
- Cocos2d-x 实现地图滚动,解释缝隙产生的原因以及解决方案
- Java-WebSocket 项目的研究(三) WebSocketClient 类 具体解释
- 忍者无敌-实例解说Cocos2d-x瓦片地图
- Android物业动画研究(Property Animation)彻底解决具体解释
- Cocos2d-x 瓦片地图TiledMap
- 24.Cocos2d-x瓦片地图TMXTiledMap
- Cocos2d-X中使用瓦片地图《二》
- Cocos2d-X 瓦片地图使用的实例项目(包含碰撞检测,移动)
- Android研究之手PullToRefresh(ListView GridView 下拉刷新)使用具体解释
- Cocos2d瓦片地图的导入
- cocos2d-x显示瓦片地图黑线的问题
- 【Cocos2d-X开发学习笔记】第25期:游戏背景之瓦片地图集类(CCTMXTiledMap)的使用
- IOS研究之网络编程(二)-Cocoa Streams使用具体解释