(12)瓦片地图

在游戏开发过程中,我们会遇到超过屏幕大小的地图,例如即时战略游戏,使得玩家可以在地图中滚动游戏画面。这类游戏通常会有丰富的背景元素,如果直接使用背景图切换的方式,需要为每个不同的场景准备一张背景图,而且每个背景图都不小,这样会造成资源浪费。

瓦片地图就是为了解决这问题而产生的。一张大的世界地图或者背景图可以由几种地形来表示,每种地形对应一张小的的图片,我们称这些小的地形图片为瓦片。把这些瓦片拼接在一起,一个完整的地图就组合出来了,这就是瓦片地图的原理。

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节点

    TMXTiledMap *map = TMXTiledMap::create("bg.tmx");
    addChild(map, 0);

遍历子节点

    Vector<Node*> pChildrenArray = map->getChildren();

    SpriteBatchNode* child = NULL;

    Ref* pObject = NULL;

    for (Vector<Node*>::iterator it = pChildrenArray.begin(); it != pChildrenArray.end(); it++) {
        pObject = *it;
        child = (SpriteBatchNode*)pObject;

    }

获取/删除一个瓦片

    TMXLayer* layer = map->getLayer("layer0");
    Sprite* tile0 = layer->getTileAt(Point(1, 15));
    layer->removeTileAt(Point(1, 15));

遍历对象层中对象

    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());
    }
时间: 2024-10-06 03:57:06

(12)瓦片地图的相关文章

Cocos2d-x之瓦片地图 Tiled

Cocos2d-x之瓦片地图 Tiled 首先使用 瓦片地图编辑器(Tiled) 制作一个瓦片地图,并将其放入工程的Resources目录下 功能实现: 将地图显示在窗体中 将精灵添加到地图定义的对象层中的一个对象上 移动精灵,使其可以和碰撞图层上的精灵发生碰撞 碰撞后碰撞图层上的精灵消失,label字体改变 代码部分: HelloWorldScene.h 1 #ifndef __HELLOWORLD_SCENE_H__ 2 #define __HELLOWORLD_SCENE_H__ 3 4

Cocos2d-x使用瓦片地图

图所示的复杂地图可以使用瓦片地图技术,瓦片地图是用一些小图片(瓦片)拼接而成,这样可以大大地减少内存消耗.如图所示的瓦片地图,只需要如图所示的三个瓦片就可以了. 瓦片地图 地图中的瓦片 瓦片地图的分类瓦片地图可以有三种分类:直角地图.斜角地图和六边形地图.1.直角地图直角地图,如图所示是使用方形瓦片构建,看上去是垂直向下观察的鸟瞰图,构成瓦片地图的瓦片不一定是正方形,也可以是长方形瓦片. 2.斜角地图斜角地图,如图所示是使用菱形瓦片构建.斜角地图是将视角旋转到45度,斜角地图能够使我们的大脑错误

Cocos2d-X研究之v3.x瓦片地图具体解释

在游戏开发过程中,我们会遇到超过屏幕大小的地图,比如即时战略游戏,使得玩家能够在地图中滚动游戏画面.这类游戏一般会有丰富的背景元素,假设直接使用背景图切换的方式,须要为每一个不同的场景准备一张背景图,并且每一个背景图都不小,这样会造成资源浪费. 瓦片地图就是为了解决这问题而产生的.一张大的世界地图或者背景图能够由几种地形来表示,每种地形相应一张小的的图片,我们称这些小的地形图片为瓦片.把这些瓦片拼接在一起,一个完整的地图就组合出来了,这就是瓦片地图的原理. TileMap方案 在Cocos2d-

瓦片地图技术总结

两个月以来,开始涉入WebGIS这块领域,发现GIS的东西确实挺多,每个方向需要研究的东西也很多,现把瓦片地图这一块的内容进行下总结.本文主要是对这个技术进行一个总体的介绍,目前,从事的是瓦片地图客户端方面的开发,后续会对其技术的具体实现做一个详细的介绍. 瓦片地图的定义 瓦片地图现状 瓦片地图设计涉及方向 瓦片地图定义: 瓦片地图:其实就是WebGIS中的一部分吧,我暂时这么理解,而且,应该是属于WebGIS中比较重要的一块.顾名思义,瓦片地图就是由一块块固定大小的“小图片”地图拼接而成的网络

显示瓦片地图

需求场景:给出瓦片地图各个层级的比例尺,窗口显示地图的需要Tile的行列号,及各自的顶点坐标. 需要理解的GIS概念: 比例尺(Scale) 地图上的一厘米代表着实际上的多少厘米.比如 1:1,155,583.42  意思是地图上1cm 等于实际11.5558342km. DPI 屏幕每英寸含有的像素点,一般屏幕是取96 1英寸 = 2.54 CM 1像素 = 0.0254/96 M  (地图上) 真实距离还要乘以 Scale 地图分别率(Resolution) 1个像素 对应多少个地理单位,这

关于Cocos2d-x的瓦片地图

1.cocos2d-x的瓦片地图是用Tiled地图编辑器做的,这个软件开源,免费,一般都是用它制作瓦片地图. 2.瓦片地图是由块层和对象组成的,块层的作用是显示和一些重叠的时候覆盖角色的作用,而对象是可以进行一些事件的触发和处理的.可以从制作好的plist文件中获取主角对象的坐标,这个坐标可以作为精灵创建时的初始坐标. 3.第一层块层可以是背景层,第二层块层可以是事物层,然后再加一个主角对象,打包成plist文件就可以了. 4.地图随主角的移动,其实是屏幕的移动,瓦片地图本身没有动,主角在动,动

openlayers3应用(二):加载百度离线瓦片地图

上一篇文章介绍了使用openlayers3加载百度在线地图,对某些项目或应用场景比如不允许上外网的单位,某些项目只针对一定区域地图加载应用,比如一个县的地图,可以采用下载百度瓦片地图,在服务器或者本机单独部署的方式进行. 本篇主要讲述如何使用openlayers3调用下载的百度离线瓦片地图.瓦片地图下载器,网上有很多,在此不做详细描述. Openlayers3加载离线百度瓦片地图,效果以及代码如下: 代码如下: <!DOCTYPE html> <html xmlns="http

瓦片地图的前世今生(转载)

从古巴比伦黏土地图到今天的电子地图,从哥伦布航海图到现代化的卫星导航,地图的历史凝聚着人类的好奇和智慧,也掺杂着血腥和欲望.地图的历史足够厚重,因为地图关联着政治.军事.经济的沉浮:地图的历史也足够精彩,因为地图是为满足需求,伴随科学和技术的发展而发展起来的.      相当长一段时间内,地图都是小部分人的游戏.军事家用地图指挥战役:航海家用地图指引方向:国家用地图标记领地... 直到计算机技术普及,地图技术开始服务于更多的领域. 但始终是,专业的人,在专业领域,做着与地图有关的专业的事. 直到

Google Map API V3调用arcgis发布的瓦片地图服务

由于最近项目需要用到CAD制作的地图,但之前一直使用的是用谷歌离线瓦片地图的方式,怎么样把CAD图像地图一样有缩放,移动的功能放到网页显示成了难题, 原先的谷歌地图的代码难道就不能用了?重新写一套代码得多久呢,得花多少时间精力呢? 于是开始尝试了N种方法,最后找的可能算是最好的方法可以沿用现有的代码,方法是:首先要用ARCGIS软件,把CAD图转化为mxd文件(当然其中各种困难就不提了,而且转换后的效果不一定能和CAD完全一样), 最后请教的是学地理信息系统专业的朋友才搞定的.其次把mxd发布成