`
wangweike
  • 浏览: 66398 次
  • 性别: Icon_minigender_1
  • 来自: Mars
社区版块
存档分类
最新评论

瓷砖地图

阅读更多

90度角或45度角瓷砖地图

90度角瓷砖地图(Orthogonal Tilemaps)用正方形或长方形的瓷砖组成的,通常以从上到下的视角展示游戏世界。在使用90度角透视的同时,设计师可以使用长方形图片创造出长度比宽度大的物体,由此创造出深度的幻觉。

 

斜45度角瓷砖地图(Isometric Tilemaps)通过将透视旋转45度以得到更加真实的深度感觉。虽然所有的瓷砖图片实际上是2D的,但是斜45度角瓷砖地图可以让我们的大脑相信我们是在看3D的地图。斜45度角瓷砖地图的图片是钻石形状的(也就是菱形),同时允许相邻的靠近观察者的瓷砖覆盖一部分离观察者远一些的瓷砖。

 

Tiled

Tiled是一款可免费下载和使用开源工具,可以编辑90度角瓷砖地图和斜45度角瓷砖地图,支持多个层,允许添加触发区域和物体,及为瓷砖添加用来判断瓷砖类型的属性。
http://www.mapeditor.org/中下载for windows或for mac版本。 当前最新版本 v0.16.2
对于Tiled Map Editor来说,瓷砖图片保持在相同的位置是很重要的, 因为编辑器是通过图片位置和相关的位移来引用各个瓷砖的。
可以直接在图片编辑软件中制作瓷砖地图,要把图片的背景设置为透明。所有的瓷砖都要是相同尺寸的,而且瓷砖之间的空间必须保持一致。

 

生成TMX文件

cocos2d游戏引擎原生支持Tiled生成的TMX文件。
通过菜单栏的 Map ➤ New Tileset 来添加需要的瓷砖集。
Tileset瓷砖集其实就是一张包含多个瓷砖的图片,每个瓷砖之间的间隔相同。
瓷砖层:从菜单选择 Layer ➤Add Tile Layer 生成一个新的瓷砖层。
对象层:从菜单选择 Layer ➤Add Object Layer 生成用于添加物体的层。

Tiled中的物体只是简单的方块而已,可以在里面进行绘画操作,之后则可以在代码中进行获取。

可以使用物体层触发某些事件。
对于物体层中的长方形物体,可以在物体区域内点击右键显示上下文菜单。
“物体层”这个名称有些误导,因为大多数游戏把这些长方形区域作为趣味点和触发区域来使用,而不是作为实际的物体来使用。
物体层是一种不同的层,不能利用瓷砖地图(tilemap)的layerNamed方法得到它。cocos2d中的物体层由CCTMXObjectGroup类表示,这个名字有点误导,因为在Tiled软件中叫做object layer,而不是object group。通过CCTMXObjectGroup类的objectGroupNamed方法得到物体层。可以从物体层中获取所有的定义的矩形,然后判断其它点是否落在这些矩形内。
地图的尺寸是由瓷砖的数量来决定的,而不是像素。单个瓷砖大小必须与单个瓷砖图片的大小相同,否则会导致瓷砖和图片大小不能完全匹配。
把Tiled软件导出的TMX格式的瓷砖地图文件放到与瓷砖集图片相同的文件夹中。TMX文件只能引用同一文件夹下的瓷砖集图片。
TMX文件实际上就是一个XML文件。图片引用的地方不应该包含任何路径,应该只有一个图片文件名。

cocos2d-x好像只能使用对层数据使用了Base64(zlib压缩)格式的tmx文件。

 

层的使用

使用多个层的好处之一是可以在cocos2d中将地图中的某个区域替换掉。比如可以利用层把地图的一部份在冬天和夏天之间进行切换。

但每一个瓷砖层都会带来额外的系统开销。每个层都会被渲染,从而影响游戏运行性能。建议层的数量越少越好。对大多数游戏而言,2到4个瓷砖层已经够了。

在添加了新层和设置完层中的瓷砖以后,要确保在真实设备上做个测试,看一下游戏的帧率是否正常。
有的层在游戏中被用于判断瓷砖的某些属性,比如游戏事件层只是cocos2d用来为某些瓷砖确定属性的,所以不需要渲染这个层,通过eventLayer.visible = NO来隐藏这个层。


瓷砖的“全局标识符”(GIDs)概念。瓷砖地图上的 每一块瓷砖都附带一个独有的整数编号,也就是GID。地图上的瓷砖GID是从1开 始连续编号的。GID为0表示的是空白瓷砖,也就是没有瓷砖。利用CCTMXLayer 的tileGIDAt方法,你可以获取层中指定坐标上瓷砖的GID编号。
CCTMXTiledMap有一个叫做propertiesForGID方法,如果指定GID编号的瓷砖附 带属性的话,此方法会返回一个NSDictionary字典。这个NSDictionary字典包 含了在Tiled中为瓷砖添加的属性(见图10-8)。
字典的键/值都是用NSString 对象存储的。调试看一下字典里到底有什么东西,使用CCLOG将字典打印出来。CCLOG(@"NSDictionary 'properties' contains:\n%@", properties);

90度角瓷砖地图的瓷砖坐标是从 左上角开始算起的-也就是左上角是瓷砖地图的原点(0,0),
即(列,行)

碰撞层:用于测试某一块是否允许角色通过,这个层不应该可见。所以在加载地图后,应该立即隐藏这个层。
添加一个新tile层,将Opacity滑块移动到中间,选一块颜色特殊的瓷砖,右键增加属性blocks_movement值为1。选中这个碰撞层,在和地图层对应上的房子,树,山等处画出瓷砖,

mapSize:{30, 20},tileSize : {32, 32}
mapSize: 地图有多少列瓷砖,多少行瓷砖
tileSize: 每行瓷砖的宽度,每行瓷砖的高度
CCLOG(@"mapSize:%@,tileSize : %@",NSStringFromCGSize(INSTANCE.tiledMap.mapSize),NSStringFromCGSize(INSTANCE.tiledMap.tileSize));


遍历瓦片地图的所有子成员,并调用setAliasTexParameters,对瓦片地图中的所有纹理元素关闭抗锯齿效果,这样能保证纹理的像素风格,即便地图缩放的时候也是如此。
for(CCTMXLayer *child in [_tileMap children])
{
        [[child texture] setAliasTexParameters];
}


游戏地图的实现方式,最常见的三种方式是:整图;Tile元素拼装;栅格化切片。
(1)整图
概念解释:所谓整图加载很好理解直接加载一张背景图。
适合形式:小场景,因为太大的图片会导致加载时间过长,用户体验不好。 另外即使加载了,玩家不一定会移动去看,也造成加载浪费。
优       点:程序实现简单,画面精致。
缺       点:首次加载时间较长,有局限性。
(2)Tile元素拼装
概念解释:地图是由很多个标准菱形 拼接起来的。
适合形式:这种实现方式无论场景大小都试用,当地图元素中有很多相同素材(譬如草地),我们就只需要加载一个素材来拼接完成。
优       点:程序美术资源包小且加载时间短。
缺       点:程序实现相对复杂,另外美工在制作时需考虑衔接的合理性和美观性。拼接的时候我们可能需要反复调试美观性。
(3)栅格化切片
概念解释:背景图还是一张整图,在实现上将大图切分成若干小图,根据场景坐标动态加载需要显示的小块地图。
适合形式:大场景地图。
优       点:结合动态加载,减少第一次加载时间,以及避免加载浪费。
缺       点:程序实现相对复杂。

从程序实现角度来说实际上只算是两类:整图和分块,重点表现在资源加载上。
无论是Tile拼接还是栅格化切片只不过是前期资源准备和配置文件不同,真正程序运行的实现方式还是一样。
‍栅格化切片相对简单,只需要做个切图工具,按规格切图就好;而Tile拼接我们就需要借助工具反复调整来确定一张好的地图来,相对繁琐。有点自然是加载时间短,资源包小。‍
‍总之,无论是整图加载还是分块加载,根本没有孰优孰劣的说法。我们可以根据游戏的需求来选择不同的实现方式,即使在同一个游戏中,也可以根据不同的场景来选择不同的实现方式。所以,我们在设计地图加载功能类的时候都会把这两种方式都设计进去。

在地图编辑器中,tile块的属性不要出现空的一行,可用delete键删除。否则在cocos2dx中解析出现错误。

 

分享到:
评论

相关推荐

    【纯JAVA语言做RPG游戏】1.做个瓷砖地图生成器

    在本项目中,我们将探讨如何使用纯Java语言开发一个RPG(角色扮演游戏)中的瓷砖地图生成器。这个生成器能够自动生成游戏世界的基础布局,为玩家提供丰富的探索环境。地图生成是游戏开发的重要组成部分,特别是在2D...

    TileCat:只是一个小的瓷砖地图编辑器-开源

    标题中的“TileCat”是一个小型的瓷砖地图编辑器,它被设计用于创建和编辑基于瓷砖的游戏地图或图形场景。开源的特性意味着它的源代码是公开的,允许用户查看、学习和自由修改,促进了社区协作与改进。这个工具可能...

    UnityTileEngine:使用 2D 瓷砖地图的编辑器和游戏引擎,使用 Unity 跨平台 SDK

    UnityTileEngine 是一个基于 Unity 的 2D 瓷砖地图编辑器和游戏引擎,它专为使用 C# 语言开发跨平台游戏而设计。这个工具允许开发者轻松地创建、编辑和管理 2D 游戏场景,尤其适用于像素艺术风格的平台游戏。 **...

    Isometric:瓷砖地图的等距游戏

    在"Isometric:瓷砖地图的等距游戏"项目中,开发者可能使用Java编程语言来构建一个基于等轴测视图的游戏场景。Java是一种多平台、面向对象的语言,具有丰富的库和工具,非常适合游戏开发。项目描述提到有四个图块,每...

    isomap:等距瓷砖地图模型和查看器

    等距瓷砖地图模型和查看器(Isomap)是一种在数据可视化领域广泛应用的降维技术,主要基于几何结构的保持。Isomap是“Isometric Feature Mapping”的缩写,它结合了主成分分析(PCA)和MDS(多维尺度分析)的思想,...

    Unity 2D Toolkit RPG地图块拼接

    2. **2D Toolkit插件**:2D Toolkit(简称TK2D)是Unity的一个强大2D扩展,提供了2D精灵、瓷砖地图、动画、碰撞检测等功能。它简化了2D游戏的开发流程,使得开发者无需深入学习复杂的编程就能构建出专业级别的2D游戏...

    cocos2d-x 地图编辑器

    Tiled Map Editor支持多种地图类型,如瓷砖地图(Tile Maps)和对象图层(Object Layers),并允许添加图像图层、组和注释,提供了丰富的地图设计功能。 二、Tiled Map Editor介绍 1. 安装与界面:Tiled Map ...

    Dungeon Map Editor:使用.NET框架创建的2D瓷砖地图编辑器。-开源

    使用.NET框架创建的2D瓷砖地图编辑器。

    Android 共生地球 v1.1.15 国产版地图

    共生地球是一款高清卫星地图、外部测量地图、户外钓鱼地图、专业3d世界地图软件,类似于谷歌地球。使用方便的卫星地图工具,功能类似谷歌地球,但提供...5.自定义地图源:支持各种协议的瓷砖地图源,快速方便添加编辑。

    Mappy地图编辑器汉化版+使用教程

    1. **灵活的瓷砖地图**:用户可以创建任意大小的网格,放置各种瓷砖来构建游戏世界。 2. **对象图层**:除了基本的瓷砖图层,Tiled还允许添加对象图层,放置游戏对象,如角色、道具等。 3. **层分组**:组织地图的...

    地图编辑器

    它支持创建不同类型的瓷砖地图,如层、对象组、图例等。Tiled的主要特点包括: 1. **多层地图**:用户可以创建多层地图,实现复杂的游戏场景设计。 2. **对象和图例**:支持添加自定义对象和图例,方便游戏逻辑的...

    A python Tkinter widget to display tile based maps

    首先,让我们理解“瓷砖地图”(Tile-based Map)。在游戏开发、地图绘制等领域,经常使用这种技术。地图被分割成小的正方形或矩形图像,这些图像被称为“瓷砖”,然后按照特定的布局拼接起来形成完整的世界或地图...

    SuperTilemapEditor1.7.0.zip

    《超级瓷砖地图编辑器SuperTilemapEditor1.7.0详解》 在游戏开发领域,地图编辑工具扮演着至关重要的角色,它们可以帮助开发者快速、高效地构建游戏世界。SuperTilemapEditor1.7.0便是一款专为Unity引擎设计的高级...

    地图编辑实例

    TileMap Editor是一款用于设计2D瓷砖地图的工具,它允许开发者通过拖放瓷砖来构建复杂的地图布局。在本实例中,TileMap Editor被用来创建地图的图形层,包括不同的地形、障碍物和其他环境元素。这些地图数据通常以....

    Cocos2d-x Tilemap Classes

    在这个主题中,我们专注于"Cocos2d-x Tilemap Classes",这是一组工具,让开发者能够轻松地在游戏环境中构建和管理瓷砖地图(Tile Maps)。瓷砖地图是一种高效且灵活的方法,用于创建复杂的2D场景,如游戏关卡,它们...

    cocos2dx 3.3 tilemap 缩放滑动并且准确点击对象

    在Cocos2d-x 3.3版本中,开发2D游戏时经常使用TileMap(瓷砖地图)来构建游戏场景。TileMap允许开发者通过拼接小的图片(瓷砖)来创建复杂的地图,同时提供了高效的渲染和操作性能。在这个场景中,我们需要实现的...

    贪吃蛇-带地砖地图之java实现,望对大家有用

    包含一张游戏截图和完整源码,有任何问题,可发站内信。 只希望能对大家有帮助,O(∩_∩)O~ 游戏运行前,请先导入substance.jar包到classpath中,我已经另外上传了substance.jar文件(不要积分)。

Global site tag (gtag.js) - Google Analytics