在瓷砖地图游戏里,游戏图形由叫做“瓷砖”(tiles)的一小组图片相互排列组成。这些图片被放置在一个网格中,得到的效果就是令人信服的游戏世界。瓷砖地图的概念非常吸引人,因为你可以节省内存而不必使用很多贴图渲染整个世界,同时还可以有很多不同的组合。
本章将会使用最简单的一种瓷砖地图:90度角瓷砖地图(Orthogonal Tilemaps),介绍瓷砖地图的一般概念。它们是用正方形或长方形的瓷砖组成的,通常以从上到下的视角展示游戏世界。

Tiled Map Editor(瓷砖地图编辑器)
最出名的用于生成cocos2d-x中可用的瓷砖地图的编辑器叫做 Tiled Map Editor(在此我简称它为 Tiled)。cocos2d-x游戏引擎原生支持 Tiled 生成的TMX文件。Tiled是免费的,官方网站http://www.mapeditor.org/
好像2.02的源码中地图加载模块有问题  请替换 :点我下载  
下载之后替换到cocos2dx下的tilemap_parallax_nodes里面的代码删除  解压出来的代码放入文件夹
要在cocos2d-x中使用TMX格式的瓷砖地图,首先必须把TMX文件和它所引用的瓷砖集图片文件作为资源添加到自己项目中。 在本例子中  我们将level1.tmx和tileSet.png加入到我们的项目中   
素材下载:点我下载
在代码里加载和显示瓷砖地图非常方便,以下代码来自MainScene2类的init方法: 
  1. CCTMXTiledMap *map=CCTMXTiledMap::create("level1.tmx");
  2. this->addChild(map);
  3. CCTMXLayer *tmxlayer=map->layerNamed("walls");
  4. tmxlayer->setVisible(false);

CCTMXTiledMap类是用TMX文件名来初始化的,然后作为子节点被添加到当前层中

下一步是通过使用tileMap的layerNamed方法和在Tiled中应用过的层命名"walls",来获取CCTMXLayer(也就是之前在Tiled中添加的游戏事件层),我们通过第四行  可以将地图中的砖块层隐藏掉

好了   运行程序 我们可以在手机上看到  地图已经显示了  但是你还不能去操作

接下来 我们需要判断  是否按中了问号方块

我们先将按下的坐标  转换为tmx地图的坐标

  1. CCPoint MainScene2::tilePosFromLocation(CCPoint touchpoint,
  2. CCTMXTiledMap *map) {
  3. // 触摸的屏幕坐标必须减去瓷砖地图的坐标 - 万一瓷砖地图位置已经不在(0,0)点上了
  4. CCPoint point = ccpSub(touchpoint, map->getPosition());
  5. // 将得到坐标值转换成整数
  6. point.x = (int) (point.x / map->getTileSize().width);
  7. point.y = (int) ((map->getMapSize().height * map->getTileSize().height
  8. - point.y) / map->getTileSize().height);
  9. return point;
  10. }

转换后的坐标就类似于   如图

  1. void MainScene2::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent) {
  2. CCNode *node = getChildByTag(TargetMap);
  3. CCTMXTiledMap *map = (CCTMXTiledMap*) node;
  4. CCPoint touchpoint = CCDirector::sharedDirector()->convertToGL(
  5. pTouch->getLocationInView());
  6. CCPoint mappoint = tilePosFromLocation(touchpoint, map);
  7. CCLog("mappoint.x=%f,mappoint.y=%f", mappoint.x, mappoint.y);
  8. bool isTouchOnWall = false;
  9. CCTMXLayer *maplayer = map->layerNamed("walls");
  10. int tileGID = maplayer->tileGIDAt(mappoint);
  11. CCLog("tileGID=%i", tileGID);
  12. if (tileGID != 0) {
  13. CCDictionary *properties = map->propertiesForGID(tileGID);
  14. if (properties) {
  15. CCString *isQuesWall = (CCString*) (properties->objectForKey(
  16. "isQues"));
  17. isTouchOnWall = isQuesWall->boolValue() == true;
  18. }
  19. }
  20. CCLabelTTF *label=(CCLabelTTF*)(getChildByTag(TargetLabel));
  21. if(isTouchOnWall){
  22. label->setString("按下问号砖块");
  23. }else{
  24. label->setString("未按到问号砖块");
  25. }
  26. }

首先 我们来解释下上面的代码

3-4行:通过tag 获取CCTMXTiledMap节点;

6行:获取按下的坐标点 并转换为以左下角为原点的坐标;

8行:将按下的坐标 转换为tmx坐标地图

11行:用于存储是否按到了问号砖块

13行:获取tmx地图集中的walls层

14行:获取按下坐标所对应的瓷砖的gid (利用CCTMXLayer的tileGIDAt方法,你可以获取指定坐标上瓷砖的GID编号。)

18行:CCTMXTiledMap有一个叫做propertiesForGID方法,如果指定GID编号的瓷砖附带属性的话,此方法会返回一个CCDictionary字典。这个NSDictionary字典包含了在Tiled中为瓷砖添加的属性。字典的键/值都是用CCString对象存储的。

   CCDictionary的每一个属性都可以通过它的valueForKey方法来获取,返回的是一个CCString对象。要从一个CCString对象中获取布尔值,你可以使用CCString的boolValue方法;而要获取整数或者浮点数,你可以使用CCString的intValue或者floatValue方法。

如果你需要在地图上修改单个瓷砖,你可以使用removeTileAt和setTileGID这两个方法。在游戏过程中,前者会移除指定层上的瓷砖,后者则会替换指定层上瓷砖:

  1. maplayer->removeTileAt(mappoint);
  2. maplayer->setTileGID(tileGID,mappoint);

-------------------------

map->getTileSize():当个瓷砖的大小

map->getMapSize():指横竖瓷砖的块数


滚动瓷砖地图

实际上我们可以很轻松的实现地图的滚动,因为我们只需要让CCTMXTiledMap移动就可以了。


以后基本都是讲解实例 一个Demo写完之后就写一个教程,前两天接了个项目,所以没怎么研究cc2dx

本教程根据Cocos2d教程翻译过来

使用的cocos2d-x版本为2.02

转载于:https://blog.51cto.com/gejw0623/1009574

【cocos2d-x】瓷砖地图(TileMap)基础知识相关推荐

  1. 高精度地图偏转基础知识

    高精度地图偏转基础知识 偏转基础知识 首先,高精度地图在发布商用之前必须经过国家测绘局的加密偏转处理,此目的是为了保证国家安全.而对地图数据和应用软件的加密偏转处理是由国家自然资源部相关部门直接处理, ...

  2. 一些GIS地图的基础知识

    GIS 地 图 知 识 1. 地图.地图制图学 . 2. 地图基本概念-特性.分类.用途.工艺 (国家基本比例尺地形图) 3. 地图数学基础 (椭球.投影.高斯-克吕格直角坐标.地形图分幅) 4. 地 ...

  3. 【unity学习记录】TileMap基础知识(详细版)

  4. 【python数据挖掘课程】二十二.Basemap地图包安装入门及基础知识讲解

    这是<Python数据挖掘课程>系列文章,也是我上课内容及书籍中的一个案例.本文主要讲述Matplotlib子包,负责地图绘制,即Basemap扩展包.在做数据挖掘或可视化分析时,常常需要 ...

  5. GIS地图基础知识--入门教程

    wenzhanhttp://www.gisbbs.net/viewthread.php?tid=106&extra=page%3D1 GIS地图基础知识--入门教程 GIS 地 图 知 识 1 ...

  6. 前端地图分类(包括坐标系,GIS基础知识,2D与3D地图结构划分)

    前端地图分类(包括坐标系,GIS基础知识,2D与3D地图结构划分) 经度:longitude(lng, 0 < lng < 180) 纬度:latitude(lat, 0 < lat ...

  7. cocos2d html5 mysql_cocos2d-html5基础知识

    cocos2d-html5是cocos2d引擎家族中的的html5实现! cocos2d-html5文件结构如下: box2d(对box2d物理引擎支持的js) HelloWorld tests(测试 ...

  8. Cocos2d之Box2d基础知识

    一.box2d基础知识 1.关于 Box2D 是一个用于游戏的 2D 刚体仿真库.从游戏的视角来看,物理引擎就是一个程序性动画(procedural animation)的系统,而不是由动画师去移动你 ...

  9. 知识图谱基础知识(一): 概念和构建

    推荐: 知识图谱构建技术一览 知识图谱基础知识之三--知识图谱的构建过程 目录 一.什么是知识图谱 二.知识图谱的分层架构 三.知识图谱构架技术 (一)数据获取(Data Acquisition) ( ...

最新文章

  1. Spatial As Deep: Spatial CNN for Traffic Scene Understanding论文翻译
  2. 做人应该知道的十个道理
  3. undefined reference to 问题解决方法
  4. PriorityQueue和queue的区别
  5. 使用 SAP Fiori Tools 部署 SAP UI5 应用到 ABAP 服务器时遇到的各种错误和解决办法
  6. java调用siri 语言_如何更改Siri的声音,口音,性别和语言
  7. python评估不平衡数据集_Python Pandas:平衡不平衡的数据集(用于面板分析)
  8. 10个人做抖音,8个做不起来,为啥?
  9. 天天写代码,觉得自己特别苦逼?嗯,还有20年AI就来解放你
  10. LEADTOOLS构建HTML5 DICOM/PACS查看器
  11. 用scanf函数输入数据,字符数据的输入输出
  12. 2018中级职称计算机题库,2018年中级通信工程师传输与接入考试试题
  13. 测试显卡矿卡用什么软件,3分钟看懂:AMD二手矿卡简明鉴别、检测教程,从此脱坑不求人...
  14. 声纹识别技术简介——化繁为简的艺术
  15. NLP 论文领读 | 缺少有标注的数据集怎么训练文本检索模型?来看看 LaPraDoR怎么做的吧
  16. 教你如何删除顽固文件
  17. iOS15.4 Beta4 新测试版推送,新增反跟踪功能
  18. c语言程序设计精髓 第14周练兵题
  19. 【C语言】求最小公倍数三种方法
  20. LeetCode - 807. 保持城市天际线 - Java

热门文章

  1. VTK:可视化之ClipArt
  2. OpenCV简单的过滤器平滑的实例(附完整代码)
  3. OpenCV线性搅拌机linear blender的实例(附完整代码)
  4. Qt Creator检查代码语法
  5. OpenGL波浪模拟
  6. C++Strand Sort链排序的实现算法(附完整源码)
  7. C语言通过用户输入将八进制转换为十六进制(附完整源码)
  8. C语言递归算法将十进制转换为二进制(附完整源码)
  9. QT绘制散点图(2)
  10. linux新建备份数据库的脚本文件,Linux下shell脚本:自动每日备份网站文件和数据库上传FTP空间...