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中存储数据和读取信息,本篇博客我们将一起讨论和数据存储同样重要的联网技术. 一.弱联网技术介绍 在网络游戏中许多重要的功能都需要网络连接,而根据需 ...
随机推荐
- highchairts柱状图显示数值并且带单位
$(target).highcharts({ chart: { type: 'bar' }, colors: [ "#1ab394" ], title: { text: title ...
- 深入浅出ExtJS 第五章 树形结构
5.1 TreePanel的基本使用 //树是一种非常典型的数据结构; 5.1.1 创建一棵树 //树控件有Ext.tree.TreePanel类定义,控件的名称为TreePanel;TreePane ...
- android app性能优化大汇总(UI渲染性能优化)
UI性能测试 性能优化都需要有一个目标,UI的性能优化也是一样.你可能会觉得“我的app加载很快”很重要,但我们还需要了解终端用户的期望,是否可以去量化这些期望呢?我们可以从人机交互心理学的角度来考虑 ...
- Java之累加和
所谓累加算法,就是数学中数列求的算法,这都是司空见惯了的.下面我们用java求: package com.cdp.leijiahe; import java.util.Scanner; public ...
- Linux下用freetds连接mssql中文乱码的问题【参考1】
由于工作原因我们需要通过php访问我们以前的Sql Server 2005数据,所以就有了这篇文章的诞生.废话就少说了,做程序设计的最不喜欢兜圈子了.用简介步骤说明问题,往下看.系统: Linux ...
- Struts2基本包作用详解
asm-3.3.jar作用:操作java字节码的类库包路径及主要类:未提供 asm-commons-3.3.jar作用:提供了基于事件的表现形式包路径及主要类:未提供 asm-tree-3.3.jar ...
- if条件判断语句的不同
let number = ["a":1, "b":2, "c":3]; if let num = number["d"] ...
- 《Cocos2d-x实战 JS卷 Cocos2d-JS开发》上线了
感谢大家一直以来的支持! 各大商店均开始销售:京东:http://item.jd.com/11659698.html当当:http://product.dangdang.com/23659808.ht ...
- 20141113--SQL 事务
---------------------触发器----------------------------- --触发器本质上还是一个存储过程,trigger --只不过不是通过exec调用执行,而是通 ...
- linux命令之grep用法介绍
Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来.grep全称是Global Regular Expression Print,表示全局正则表达 ...