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

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

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

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

1

2

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

addChild(map,
0);

遍历子节点

1

2

3

4

5

6

7

8

9

10

11

Vector
pChildrenArray
= map->getChildren();

SpriteBatchNode*
child =
NULL;

Ref*
pObject =
NULL;

for
(Vector::iterator
it =
pChildrenArray.begin();
it !=
pChildrenArray.end();
it++)
{

pObject
= *it;

child
= (SpriteBatchNode*)pObject;

}

获取/删除一个瓦片

1

2

3

TMXLayer*
layer =
map->getLayer("layer0");

Sprite* tile0
= layer->getTileAt(Point(1,
15));

layer->removeTileAt(Point(1,
15));

遍历对象层中对象

1

2

3

4

5

6

7

8

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-05 21:52:50

Cocos2d-X研究之v3.x瓦片地图具体解释的相关文章

Cocos2d-X研究之v3.x瓦片地图详解

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

android瓦片地图技术研究

最近根据公司项目需求,需要制作场馆的室内图并且实现根据rfid信号的自动定位功能,研究了好久找到了一个目前为止还算好用的瓦片地图工具——TileView. github连接:https://github.com/moagrius/TileView Gradle: compile 'com.qozix:tileview:2.0.1' 这个控件的功能非常强大,你可以根据需求制作任意尺寸大小的地图,可以添加marker标记,绘制路线,定位等等,如果你需要展示超大图片,或制作自定义地图应用这是你的不二选

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

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

cocos2dx[3.4](25)——瓦片地图TiledMap

[唠叨] 还记得我们小时候玩的小霸王里面的游戏吗?大部分都是基于Tile地图的游戏,如坦克大战.冒险岛.魂斗罗.吞食天地等.而在手游中,基于瓦片地图的游戏也很常见.如:<保卫萝卜>. 瓦片地图有专门的地图编辑器:Tiled Map Editor . 先给大家看个酷炫的图吧. 此图来自:http://blog.csdn.net/aa4790139/article/details/8135831 [参考] http://cn.cocos2d-x.org/tutorial/lists?id=70 

瓦片地图技术总结

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

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研究之v3.x纹理缓存详解

 概述 在游戏中需要加载大量的纹理图片,这些操作都是很耗内存和资源的. 当游戏中有个界面用到的图片非常多,第一次点进这界面时速度非常慢(因为要加载绘制很多图片)出现卡顿,我们可以使用TextureCache提前异步加载纹理,等加载结束,进入到这个界面再使用这些图片速度就会非常快.对精灵缓存不清楚的看Cocos2d-X研究之v3.x精灵帧缓存 Texture2D: 纹理,即图片加载入内存后供CPU和GPU操作的贴图对象. TextureCache(纹理缓存),用于加载和管理纹理.一旦纹理加载完

Cocos2d-X研究之v3.x 事件分发机制详解

事件分发机制 新事件分发机制:在2.x 版本事件处理时,将要触发的事件交给代理(delegate)处理,再通过实现代理里面的onTouchBegan等方法接收事件,最后完成事件的响应.而在新的事件分发机制中,只需通过创建一个事件监听器-用来实现各种触发后的逻辑,然后添加到事件分发器_eventDispatcher,所有事件监听器由这个分发器统一管理,即可完成事件响应.请参考更多3.0资料... 事件监听器有以下几种: 触摸事件 (EventListenerTouch) 键盘响应事件 (Event

在Cocos2d-X3.0中使用瓦片地图中的对象层

在Cocos2d-X中使用瓦片地图是非常常见的,例如在跑酷和塔防游戏中通常会用到瓦片地图,在前面的博客中我也介绍了瓦片地图的使用,这篇博客主要介绍在Cocos2d-X3.0中使用瓦片地图中的对象层,因为3.0和2.0中调用瓦片地图的对象层的方式有所不同 对于瓦片地图的使用可以参考我的博客 瓦片地图编辑器的使用:http://blog.csdn.net/u010105970/article/details/41118191 在Cocos2d-X中使用瓦片地图<一>:http://blog.csd