zoukankan      html  css  js  c++  java
  • 关于Cocos2d-x的瓦片地图

    1.cocos2d-x的瓦片地图是用Tiled地图编辑器做的,这个软件开源,免费,一般都是用它制作瓦片地图。

    2.瓦片地图是由块层和对象组成的,块层的作用是显示和一些重叠的时候覆盖角色的作用,而对象是可以进行一些事件的触发和处理的。可以从制作好的plist文件中获取主角对象的坐标,这个坐标可以作为精灵创建时的初始坐标。

    3.第一层块层可以是背景层,第二层块层可以是事物层,然后再加一个主角对象,打包成plist文件就可以了。

    4.地图随主角的移动,其实是屏幕的移动,瓦片地图本身没有动,主角在动,动到一半屏幕的距离的时候,屏幕也要开始动了。(例子是横版2.5D游戏)

    瓦片地图的分类
    瓦片地图可以有三种分类:直角地图、斜角地图和六边形地图。
    1、直角地图
    直角地图,如图所示是使用方形瓦片构建,看上去是垂直向下观察的鸟瞰图,构成瓦片地图的瓦片不一定是正方形,也可以是长方形瓦片。


    2、斜角地图
    斜角地图,如图所示是使用菱形瓦片构建。斜角地图是将视角旋转到45度,斜角地图能够使我们的大脑错误地认为,我们是在三维游戏世界中。在早期的电子游戏中由于硬件性能所限制,很多游戏采用斜角地图模拟三维游戏。但是现在运行三维游戏已经不是问题,所有现在我们一般不推荐使用斜角地图。


    3、六边形地图
    六边形地图,如图所示是使用六边形瓦片构建。


                                                                                            直角地图


                                                                                                 斜角地图



                                                                              六边形地图


    瓦片地图中核心概念
    在瓦片地图中有一些基本的概念需要我们了解一下,这些概念包括:层、瓦片、瓦片地图坐标和全局标识。
    1、层
    瓦片地图由地图层组成,我们可以对层进行创建、删除、隐藏和显示等操作。
    层可以分为:普通层和对象层。普通层用来绘制一些地图基本要素,这些地图要素基本上是固定的,如图所示,云、鸟、树木、仙人掌和草地等。对象层中可以圈出一些区域,一个区域就是一个对象,用来设置一些属性,我们可以获得通过代码获得这些对象属性。地图中对象与场景中精灵关联,如图所示。
    如图所示,地图中层是有顺序的,因此前面的层会遮挡后面的层,而且层一旦设置为隐藏,那么就不能在程序中访问。
    注意  由于绘图引擎会对每一层的每一个瓦片都进行绘制,在设计层的时候在能满足需求情况下层数越少越好,层数一般不宜超过4层。


                                                                           瓦片地图中的层(TODO然后能表现出分层呢?)


    2、瓦片
    瓦片(tiles)是构成层最小要素,有些人将tiles翻译为“瓷砖”,我觉得“瓦片”更加贴切,事实上地图中的层就是由这些“瓦片”铺设而成的。地图中所需要的瓦片被设计到一张大的图片中,这种文件叫“瓦片集”,如图所示是David Gervais提供开源免费瓦片集,我们可以到http://pousse.rapiere.free.fr/tome/index.htm网站下载更多的瓦片集。瓦片集中的每一个瓦片,大小是一样,瓦片之间可以有固定的缝隙,在使用的时候地图设计软件会将瓦片集分割成小的瓦片。


                                                                                      David Gervais瓦片集


    3、瓦片地图坐标
    在瓦片地图中有自己的一套坐标,地图的最小单位是瓦片,一个瓦片占有一个坐标点。不同类型的地图它的坐标是不同的,图11-13所示是直角瓦片地图坐标,坐标原点在左上角。图11-14所示是斜角瓦片地图坐标,坐标原点在菱形地图的顶点。


                                                                                     直角瓦片地图坐标



                                                                   斜角瓦片地图坐标(TODO去掉灰色底色)


    4、全局标识
    瓦片地图中的每一个瓦片都拥有一个唯一的编号全局标识(Global IDentifier,缩写GID),用于在地图中查找某个瓦片。全局标识是从1开始的,如果为0,则说明瓦片为空,我们可以利用全局标识来判断某个坐标下是否存在瓦片。


    Cocos2d-x中瓦片地图API
    为了访问瓦片地图,Cocos2d-x中访问瓦片地图API,主要的类有:TMXTiledMap、TMXLayer和TMXObjectGroup等。
    1、TMXTiledMap
    TMXTiledMap是瓦片地图类,它的类图如图所示,TMXTiledMap派生自Node类,具有Node特点。


                                                                                            TMXTiledMap类图
    TMXTiledMap常用的函数如下: 
    TMXLayer* getLayer(const std::string &layerName)。通过层名获得层对象。
    TMXObjectGroup* getObjectGroup(const std::string &groupName)。通过对象层名获得层中对象组集合。
    Size& getMapSize()。获得地图的尺寸,它的单位是瓦片。
    Size& getTileSize()。获得瓦片尺寸,它的单位是像素。
    示例代码如下:
    TMXObjectGroup* group = _tileMap->getObjectGroup("Objects");
    TMXLayer* background = _tileMap->getLayer("Background");
    其中_tileMap是瓦片地图类。


    2、TMXLayer
    TMXLayer是地图层类,它的类图如图所示,TMXLayer也派生自Node类,也具有Node特点。同时TMXLayer也派生自SpriteBatchNode类,所有TMXLayer对象具有批量渲染的能力,瓦片地图层就是由大量重复的图片构成,它们需要渲染提高性能。


                                                                                                TMXLayer类图
    TMXLayer常用的函数如下: 
    std::string& getLayerName()。获得层名。
    Size& getLayerSize()。获得层尺寸,它的单位是瓦片。
    Size& getMapTileSize()。获得瓦片尺寸,它的单位是像素。
    Point getPositionAt(const Point& tileCoordinate) 。通过瓦片坐标获得像素坐标,瓦片坐标y轴方向与像素坐标y轴方向相反。
    int getTileGIDAt(const Point& tileCoordinate)。通过瓦片坐标获得GID值。


    3、TMXObjectGroup
    TMXObjectGroup是对象层中的对象组集合,它的类图如图11-17所示,注意TMXObjectGroup与TMXLayer不同,TMXObjectGroup不是派生自Node,不具有Node特性。

                                                                                           TMXObjectGroup类图
    TMXObjectGroup常用的函数如下:
    Value getProperty(const std::string &propertyName)。通过属性名获得属性值。
    ValueMap getObject(const std::string &objectName)。通过对象名获得对象信息。
    ValueMap getProperties()。获得对象的属性。 
    ValueVector getObjects()。获得所有对象。
    ValueVector类型的别名是std::vector<Value>,vector是C++的容器类,它能够存放任意类型的动态数组,std是命名空间。
    ValueMap类型的别名是std::unordered_map<std::string, Value>,unordered_map也是C++的容器类,它是一种无序的map类型,map是“键-值”对类型。

    提示  Value是Cocos2d-x中泛型类,它可以表示unsigned char、int、float、double、bool、std::string、ValueVector、ValueMap和ValueMapIntKey等数据类型。

  • 相关阅读:
    POSTGRESQL 批量权限 管理方法
    centos7安装rabbitmq
    centos7使用cron任务的相关命令(与centos6有区别)
    crontab定时执行shell脚本
    使用kong-dashboard
    Kong组件构成及使用
    Docker基本操作命令
    微服务写的最全的一篇文章
    centos7安装kong和kong-dashboard
    sql练习03
  • 原文地址:https://www.cnblogs.com/HangZhe/p/5547351.html
Copyright © 2011-2022 走看看