• 八、cocos2dx之TileMap


    本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=79

    一、Tiled Map

    砖块地图为了能够易用而创建,无论你的游戏是一个RPG,还是platformer(平台游戏)或者是Breakout clone都可以灵活的应用在cocos2dx中,cocos2dx支持由开源项目TiledMap Editor创作的地图并且被存储为TMX格式。

    二、TMX 砖块地图格式

    Cocos2d支持由Tiled创造的地图。

    Tiled有两个版本:

             一个是java项目,可以运行在mac,window和linux中,是一个稳定的版本。

             一个QT项目,几乎支持所有java版本的功能。最新的QT版本号是0.4.0并且支持除了六边形地图之外的所有地图。

    用哪个版本你可以自己决定,我们建议使用QT版本,因为从现在开始这个版本是开发主线了,但是一些人也喜欢用java版本,因为不是所有旧的特性已经被移植过来了。

    三、Cocos2d支持如下的TMX地图:

    方向:

      正交地图

      等距地图

      六角地图(边在左右方向。边在上下的不被支持。貌似Tiled不支持他们)

    砖块:

          被嵌入的砖块不被支持(是指:嵌入图片的砖块集)

             仅仅被嵌入的砖块集被支持(是指:砖块集被嵌入,但是不是它的图片)

             每层支持至多一个砖块集

    图层:

    你可以设置尽可能多的图层。

    通过一个CCTMXLayer(是一个CCSpriteSheet的子类)每一层Layer都将会在内部被呈现出来。

    每一个砖块可以通过CCSprite(它的父类是CCTMXLayer)呈现出来。

    对象组:

           对象组也可以被支持。

    四、坐标系和GIDS

    坐标系:

    被用在64*32地图中的坐标系是:

             (0,0):左上角

             (63,31):右下角

    GIDA

    砖块的GID是指砖块的全局标识。这是一个无符号int,从1到砖块的质量不等。

     

    如果你有五种不同的砖块,那么:

    Tile 0将会有GID 1

             Tile 1将会有GID 2

             Tile 2将会有GID 3

             等等。

    GID 0被用来展示一个空砖块

    五、如何创造一个TMX节点

    // 创建TMX地图
    CCTMXTiledMap *map = CCTMXTiledMap::create("TileMaps/iso-test-vertexz.tmx");
    
    addChild(map, 0, kTagTileMap);
    
    // 所有的地图默认是失真的,如果你想创建非失真砖块,你需要添加入下代码:
    
    //遍历所有的层(失真精灵管理者),并且设置他们为非失真
    
    CCArray * pChildrenArray = map->getChildren();
    
    CCSpriteBatchNode* child = NULL;
    
    CCObject* pObject = NULL;
    
    CCARRAY_FOREACH(pChildrenArray, pObject)
    {
            child = (CCSpriteBatchNode*)pObject;
    
            if(!child)
                break;
    
            child->getTexture()->setAntiAliasTexParameters();
    }
    

      

    六、如何 get/add/delete/modify 一个砖块

    获取一个砖块在特定的坐标:

    CCTMXLayer* layer = map->layerNamed("Layer 0");
    
    CCSprite *tile0 = layer->tileAt(ccp(1,63));
    

      

    在特定坐标获取一个砖块的GID:

    layer->setTileGID(m_gid, ccp((float)3, (float)3));
    
    // 在特定坐标移除砖块
    
    layer->removeTileAt( ccp(5.0, 5.0) );
    

      

    在特定的坐标设置一个砖块的GID
    layer->setTileGID(m_gid, ccp((float)3, (float)3));
    
    // 在特定坐标移除砖块
    
    layer->removeTileAt( ccp(5.0, 5.0) );
    

      

    遍历一个Layer
    CGSize s = layer->getLayerSize();
    
    for( int x=0; x<s.width;x++) {
    
            for( int y=0; y< s.height; y++ ) {                 
    
                    unsigned int tmpgid = layer->tileGIDAt(ccp(x,y));
    
                    layer->setTileGID(tmpgid+1,ccp(x,y));
    
            }
    
    }
    

      

    等距地图和正交地图都是适用的。但是对六角地图不适用。
     
    七、z-order和深度缓冲

    如果你的游戏需要通过设置精灵的z值将精灵们放到特定砖块的之前或者之后,那么你又两个选择使用OpenGL ES深度缓冲

    • 使用多个TMX Layer和z-order

    使用深度缓存

    使用两个TMX层来创建一个地图是非常重要的:

    • 一个背景图层:例如:草地
    • 一个前景图层。例如:树木

     

    草地图层将会放到精灵之后。那么它的vertexZ值应该是最低的值。比如:-1000.树的砖块图层将会有不同的vertexZ值。在顶层的砖块将会比在底层的砖块有更高的vertexZ值。

      

    那么,为了完成这些,你仅仅做如下这些就行:

             打开Tiled

             选择背景图层,比如草地

             Tiled—-Layer—–Layer属性

             添加cc_vertexz=-1000

             选择前景北京,比如树

             Tiled—–Layer—–Layer属性

             添加cc_vertexz=automatic

    八、Cocos2d例子:

    等距vertexZ例子。有两个层:树和草。为树层设置cc_vertex=automatic ,为草层设置cc_vertexz=-1000
    正交顶点粒子。有两个层,树和草。为树层设置Cc_vertexz=automatic和cc_alpha_func=0.4,为草层设置cc_vertexz=-1000

    使用多层TMX层和z-顺序

    在地图中的每一层都将自动的设置zOrder值,那么在你的TMX编辑器中没有必要添加任何图层属性。添加一个TMXMap的子精灵需要你去动态的放置层中的地图对象。

    CCSprite m_tamara = CCSprite::create(tamara.png);
    
    CCPoint p = m_tamara->getPosition();
    
    p = CC_POINT_POINTS_TO_PIXELS;
    
    float newZ = -(p.y+32) /16;
    
    m_tamara->setVertexZ( newZ );

    截屏
    正交地图,可以3D投射和消除锯齿砖块。使用精灵片修复工具砖块被“修正”了。
    正交地图。地图的砖块大小比实际砖块小
    等比地图。使用2d投影和失真砖块
    六边形地图,2D投影和失真砖块。边在左右,上下的边不被支持。

  • 相关阅读:
    Struts 2 Overview
    Struts 2 Tutorial Basic MVC Architecture
    Struts 2 Tutorial
    Struts DynaActionForm example
    Struts – MappingDispatchAction Example
    Struts DispatchAction Example
    【置顶】本博客文章推荐和迁移声明
    Whatbeg's blog 文章列表
    如何实现并应用决策树算法?
    【2016读书】4月读书笔记
  • 原文地址:https://www.cnblogs.com/qinning199/p/3321953.html
Copyright © 2020-2023  润新知