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());

}

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

时间: 2024-10-07 16:31:33

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

Cocos2d-X研究之v3.x纹理缓存详解

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

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

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

Android研究之动态创建UI界面详解

 Android的基本UI界面一般都是在xml文件中定义好,然后通过activity的setContentView来显示在界面上,这是Android UI的最简单的构建方式.其实,为了实现更加复杂和更加灵活的UI界面,往往需要动态生成UI界面,甚至根据用户的点击或者配置,动态地改变UI,本文即介绍该技巧.对事件和进程的可能安卓设备实现触摸事件的监听,跨进程 假设Android工程的一个xml文件名为activity_main.xml,定义如下: 1 2 3 4 5 6 7 8 9 10 11

Java研究之文件路径的读取详解

 记得在操作系统中了解到文件读取有两种方式,当然这在各编程语言中也是通用的,所以java路径也分,相对和绝对路径.上章我们分享了Java研究之学习设计模式-组合模式详解有兴趣的朋友可以去看下. 绝对路径 绝对路径URI ,听着和URL很相似,那我们就来看看吧. URI(Uniformresource Identifier)统一资源标示符.URL统一资源定位符,是一个定位器,还说明了具体如何找到资源.所以他们就有一种抽象和继承的关系.URI抽象的说明了统一资源表示符号,而URL是具体的标识符的

Android研究之手势交互实例实现详解

 先来几张效果图: 一.没有抛掷: 二.向右抛掷一次 三.向右再抛掷一次 接下来说说Android开发中对于手势动作的识别参考资料... 首先,在Android系统中,每一次手势交互都会依照以下顺序执行. 1. 接触接触屏一刹那,触发一个MotionEvent事件. 2. 该事件被OnTouchListener监听,在其onTouch()方法里获得该MotionEvent对象. 3. 通过GestureDetector(手势识别器)转发次MotionEvent对象至OnGestureList

ECharts地图详解 【转】

$(function() { // 路径配置 require.config({ paths : { // echarts: 'http://echarts.baidu.com/build/dist' echarts : './plugins/echarts-2.2.7/doc/example/www/js' } }); // 使用 require( [ 'echarts', 'echarts/chart/map' // 使用柱状图就加载bar模块,按需加载 ], function(ec) { /

转 Echars地图详解

$(function() { // 路径配置 require.config({ paths : { // echarts: 'http://echarts.baidu.com/build/dist' echarts : './plugins/echarts-2.2.7/doc/example/www/js' } }); // 使用 require( [ 'echarts', 'echarts/chart/map' // 使用柱状图就加载bar模块,按需加载 ], function(ec) { /

Cocos2d之Ref类与内存管理使用详解

一.简介 用C++和JAVA编写过程序的朋友一定会为两种语言不同的内存管理机制懊恼.JAVA程序运行在JVM之上,由JVM自动实现内存管理,开发者只管申请内存而不用手动释放内存.当JAVA中对象没有被任何引用变量(类似于C和C++的指针)引用时,JVM会将对象释放掉.C++和C一样,是编译后能够直接被操作系统执行的语言,没有虚拟机负责其内存管理,因此需要在程序中管理内存.本文主要介绍如何使用cocos2d提供的内存管理机制. Cocos2d-x借鉴了“引用计数”思想,实现了一定程度上的自动内存管

iOS 自带地图详解

1.配置环境: 1>iOS9为了增强数据访问安全,将所有的http请求都改为了https,为了能够在iOS9中正常使用地图SDK,请在"Info.plist"中进行如下配置,否则影响SDK的使用. <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> </dict> 2>在iOS9