cocos2dx中的格子地图TileMap
格子地图的优点:
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的更多相关文章
- cocos2d-x中的Tiled地图
cocos2d-x中的瓦片地图是通过tiledMap软件制作的,存档格式是.tmx格式.此软件的使用步骤简单总结如下: (1)制作瓦片地图 1 打开软件,软件界面如下图. 2. 新建地图(文件-> ...
- 在Cocos2d-X中使用xml
XML就可以扩展标记语言.在游戏开发中,经常使用于保存游戏信息,如最高分,游戏等级.等信息,和描写叙述一些资源等,我第一次使用xml是在使用CCAnimation创建动画中,使用plist文件载入动画 ...
- Cocos2dx中零散知识点
cocos2dx中有三种定时器:schedule,scheduleUpdate,scheduleOnce.功能分别是 每隔几秒调用自定义函数.调用系统默认的update()函数.只调用一次自定义函数 ...
- (14)如何使用Cocos2d-x 3.0制作基于tilemap的游戏:第二部分
引言 程序截图: 这篇教程是<如何使用Cocos2d-x 3.0制作基于tilemap的游戏>的第二部分.在上一个教程中,我们创建了一个简单的基于tiled地图的游戏,里面有一个忍者在沙漠 ...
- (13)如何使用Cocos2d-x 3.0制作基于tilemap的游戏:第一部分
引言 程序截图: 本教程将会教大家如何使用Cocos2d-x来做一个基于tile地图的游戏,当然还有Tiled地图编辑器.(我们小时候玩的小霸王小学机里面的游戏,大部分都是基于tile地图的游戏,如坦 ...
- 在cocos2d-x中使用位图字体
http://blog.csdn.net/fansongy/article/details/9006677 通常情况下,游戏中绚丽的文字和数字都不是字体生成的而是"贴"上去!今天, ...
- C# 程序中嵌入百度地图
本例是对WinForm中使用百度地图的简要介绍.百度地图目前支持Android开发,IOS开发,Web开发,服务接口,具体可以参照'百度地图开放平台'. [动态加载百度地图]涉及到的知识点: WebB ...
- Cocos2dx中线程优先级
Cocos2dx中线程优先级问题 不论是ios还是android,遇到耗时的任务都要另起线程处理,否则程序不能及时用户的反馈.游戏中如果一圈循环不能在1/frameRate(帧率是30则1/30)秒内 ...
- 【Cocos2d-x游戏开发】Cocos2d-x中的弱联网技术
在上一篇博客中,我们一起学习了如何在Cocos2d-x中存储数据和读取信息,本篇博客我们将一起讨论和数据存储同样重要的联网技术. 一.弱联网技术介绍 在网络游戏中许多重要的功能都需要网络连接,而根据需 ...
随机推荐
- codevs3732==洛谷 解方程P2312 解方程
P2312 解方程 195通过 1.6K提交 题目提供者该用户不存在 标签数论(数学相关)高精2014NOIp提高组 难度提高+/省选- 提交该题 讨论 题解 记录 题目描述 已知多项式方程: a ...
- 公用的stringUtil工具
(function(){ var ISCHINESE = /[\u4e00-\u9fa5]/; var getData = function( value , maxLenth , isStrick ...
- Android studio 安装和使用
之前一直是使用eclipse+ADT+SDK进行Android的开发的,不愿意转到Android studio是因为熟悉了eclipse的开发环境,最近偶然使用了android studio,感觉比使 ...
- 如何在MVC中显示条形码图片(以内存流的方式)
前台代码: <script type="text/javascript"> function fresh() { var getimagecode = document ...
- android菜鸟学习笔记7----android布局(二)
3.FrameLayout:帧布局 如同Flash或者photoshop中图层的概念,在上面的图层遮盖下面的图层,没被遮到的地方仍然显示出来. 右击res/layout,然后在弹出的菜单中选择new, ...
- 在rdlc 中 显示成 yyyy年MM月dd日
在rdlc 中 显示成 yyyy年MM月dd日, 采用: =First(Format(Fields!添加时间.Value,"yyyy年MM月dd日") )
- Python Opearte MS-SQL Use Pymssql
看到很多的开源数据库会用到MySQL,Python同样也使用,但是我已经习惯使用图形化界面,操作感极强的MS-SQL 看到Python也提供MS-SQL连接方式,需要用到PyMssql. 在Windo ...
- Visual Studio下,打开资源视图rc文件,提示在另一个编辑器中打开
在网上搜索关键字: rc文件 提示在另一个编辑器中打开 很多地方的回答都是说: rc文件以代码形式打开了,只要关掉后再打开就可以了. 但是,很多时候,当关闭掉RC的代码文件以后,发现VS的RC文件 ...
- hexo资源--theme等
Hexo (https://github.com/hexojs/hexo) [3]hexo你的博客(http://ibruce.info/2013/11/22/hexo-your-blog/) [4] ...
- Cocos2d-JS动画
与动作密不可分的还有动画,动画又可以分为场景过渡动画和帧动画.场景过渡动画我们在以往介绍过,这一个我们只介绍帧动画.帧动画帧动画就是按一定时间间隔.一定的顺序.一帧一帧地显示帧图片.我们的美工要为精灵 ...