格子地图的优点:

a.节省内存,我们知道对于一款游戏来说,如果以图片来作为地图的话,对于神庙逃亡,魂斗罗这样的场景很多,地图很长的游戏显然不现实,因为图片很占内存,但是这些游戏的地图有一个特点就是:重复的部分很多,比如魂斗罗游戏的每一关的地图里边,无外乎,陆地,海洋,天空,草地等等这些元素,设想我们把地图分成一个一个的小格子,那么这么一张大的地图则只需要五种格子即可构成:陆地格子,海洋格子,天空格子,草地格子,其他格子等,而需要的地方只需要把这几种格子组合即可,这样在内存中只需要存储这五种格子的小块图片,是不是大大节约了内存呢

b.系统限制,不支持大的图片作为地图,例如android系统最大支持2048X2048的图片,而IOS系统也顶多支持4096X4096大小的图片

格子地图:可以理解为用不同的瓷砖贴地板

格子地图中的数据编码一般采用base64编码,编码规则是没6bit位将二进制进行编码成文本,

const char base64[]="A-Za-z0-9+-";//将每6位二进制编码成前面字符串中的某一位字符,因此又具有一定的加密功能

2^6=64, (0~63),所以称base64编码

cocos中有专门处理格子地图的类:CCTMXTileMap

创建格子地图:

CCTMXTileMap *map=CCTMXTileMap::create("xxx.tmx");//创建依赖.tmx文件,它其实是一个xml文件,是对格子地图的描述

addchild(map);//格子地图也是一个CCNode对象,可以添加到渲染树上

class  CCTMXTiledMap : public CCNode //格子地图本质也是一个CCNode

格子地图中的几个概念:

1.图层,CCTMXLayer,本质是一个精灵集合

获取图层:CCTMXLayer *layer = map->layerNamed(const char *layerName);//根据图层的名字来获取图层

class   CCTMXLayer : public CCSpriteBatchNode

2.地图格子:实质就是精灵,CCSprite

获取地图格子:CCSprite *spr = layer->tileAt(ccp(2, 2));//获取指定位置的地图格子,本质是一个CCSprite

TileID:格子地图中的地图格子的编号,可以通过TileID来获得地图格子的类型

获取指定位置的地图格子的id:

int gid = layer->tileGIDAt(ccp(2, 2));//获取指定位置的地图格子的编号
 CCLog("gid=%d", gid);

设置格子精灵消失:layer->setTileGID(0, ccp(3, 3));//设置格子精灵为id=0,即消失

//将格子地图坐标转换为世界坐标

CCPoint T23TileMap::Tile2PointLB(CCPoint ptTile)

{

  int x = _map->getTileSize().width*ptTile.x;//dx*x

  int y = (_map->getMapSize().height - 1 - ptTile.y)*_map->getTileSize().width;//(24-1-y)*dy

  return ccp(x, y);

}

//将openGL坐标转换为格子地图坐标

CCPoint T23TileMap::Point2Tile(CCPoint ptGL)

{

   int dx = _map->getTileSize().width;

   int dy = _map->getTileSize().height;

  CCPoint ptMap = _map->convertToNodeSpace(ptGL);//将世界坐标转换为以地图为基点的本地坐标

  int x = ptMap.x / dx;

  int y =ptMap.y / dy;

  y = _map->getMapSize().height - 1 - y;//本地坐标是以基准节点的左下角为原点的,而格子地图的原点是左上角,故应该用y轴方向的总格子数减去y/dy,才是真正的格子地图的坐标

   return ccp(x, y);

}

cocos2dx中的格子地图TileMap的更多相关文章

  1. cocos2d-x中的Tiled地图

    cocos2d-x中的瓦片地图是通过tiledMap软件制作的,存档格式是.tmx格式.此软件的使用步骤简单总结如下: (1)制作瓦片地图 1 打开软件,软件界面如下图. 2. 新建地图(文件-> ...

  2. 在Cocos2d-X中使用xml

    XML就可以扩展标记语言.在游戏开发中,经常使用于保存游戏信息,如最高分,游戏等级.等信息,和描写叙述一些资源等,我第一次使用xml是在使用CCAnimation创建动画中,使用plist文件载入动画 ...

  3. Cocos2dx中零散知识点

    cocos2dx中有三种定时器:schedule,scheduleUpdate,scheduleOnce.功能分别是 每隔几秒调用自定义函数.调用系统默认的update()函数.只调用一次自定义函数 ...

  4. (14)如何使用Cocos2d-x 3.0制作基于tilemap的游戏:第二部分

    引言 程序截图: 这篇教程是<如何使用Cocos2d-x 3.0制作基于tilemap的游戏>的第二部分.在上一个教程中,我们创建了一个简单的基于tiled地图的游戏,里面有一个忍者在沙漠 ...

  5. (13)如何使用Cocos2d-x 3.0制作基于tilemap的游戏:第一部分

    引言 程序截图: 本教程将会教大家如何使用Cocos2d-x来做一个基于tile地图的游戏,当然还有Tiled地图编辑器.(我们小时候玩的小霸王小学机里面的游戏,大部分都是基于tile地图的游戏,如坦 ...

  6. 在cocos2d-x中使用位图字体

    http://blog.csdn.net/fansongy/article/details/9006677 通常情况下,游戏中绚丽的文字和数字都不是字体生成的而是"贴"上去!今天, ...

  7. C# 程序中嵌入百度地图

    本例是对WinForm中使用百度地图的简要介绍.百度地图目前支持Android开发,IOS开发,Web开发,服务接口,具体可以参照'百度地图开放平台'. [动态加载百度地图]涉及到的知识点: WebB ...

  8. Cocos2dx中线程优先级

    Cocos2dx中线程优先级问题 不论是ios还是android,遇到耗时的任务都要另起线程处理,否则程序不能及时用户的反馈.游戏中如果一圈循环不能在1/frameRate(帧率是30则1/30)秒内 ...

  9. 【Cocos2d-x游戏开发】Cocos2d-x中的弱联网技术

    在上一篇博客中,我们一起学习了如何在Cocos2d-x中存储数据和读取信息,本篇博客我们将一起讨论和数据存储同样重要的联网技术. 一.弱联网技术介绍 在网络游戏中许多重要的功能都需要网络连接,而根据需 ...

随机推荐

  1. 微信小程序个人理解

    1:小程序不是用HTML5开发,它是由微信全新定义的规范,是基于XML+JS的,不支持也不兼容HTML,兼容受限的部分CSS写法.(wxml) weixin markup language 2:小程序 ...

  2. sql的基本用法-------修改字段默认值和属性

    修改表中已有的字段属性 ALTER TABLE 表名 ALTER COLUMN 字段名 varchar(500) --sqlserver建表表时设置字段的默认值 create table 表(id i ...

  3. LINQ to SQL 语句(2)之 Select/Distinct

    LINQ to SQL 语句(2)之 Select/Distinct [1] Select 介绍 1 [2] Select 介绍 2 [3] Select 介绍 3 和  Distinct 介绍 Se ...

  4. AsyncQueryHandler 和 CursorAdapter的使用

    AsyncQueryHandler A helper class to help make handling asynchronous ContentResolver queries easier. ...

  5. cocos2dx-lua 批量打包及修改

    coco2dx目前大部分开发者肯定是用lua解决问题,问题来了,每次改一下lua配置可能你每次都得运行 cocos luacompile -p android 针对不同的平台,可能会有某些配置会略有不 ...

  6. windows下mysql增量备份与全备份批处理

    win下的全备批处理 批处理用于游戏服务器,经过严格测试,且正式使用,主要用来完全备份数据库,当然.这只是将数备份出来 ,至于如何将备份出来的数据远程传送的远程服务器上可以调用ftp的功能,此脚本并未 ...

  7. JAVA:变量,数据类型,运算符,流程控制(简介)<1>

    一.安装和配置jdk 1.jdk是什么? (1).jdk全称是Java Development Kit, Java开发工具包; (2).jdk是sun公司开发的; (3).jdk主要包括:jre(Ja ...

  8. 9款精美别致的CSS3菜单和按钮

    1.超具立体感的CSS3 3D菜单 菜单项带小图标 记得之前向大家分享过不少CSS3 3D菜单,比如CSS3 3D动画菜单 3D立方体菜单项和HTML5/CSS3自定义下拉框 3D卡片折叠动画,效果都 ...

  9. Codevs 1063 合并果子

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond     题目描述 Description 在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分 ...

  10. OpenGL第18,19,20讲小结

    18讲是通过调用库函数画一些简单的二次几何体,比如球体.圆锥体.圆盘等等. 19讲简单的讲了下粒子系统.其实就是三角形贴上星星的纹理,通过启用混合(GL_BLEND)来达到一种动态的粒子效果.通过修改 ...