zoukankan      html  css  js  c++  java
  • Cocos2d-x Tiled地图编辑器(一)基本使用

    Tiled地图编辑器支持普通视角地图和45度角地图, 它生成的地图数据文件cocos2d-x完美的支持,Tiled地图编辑器是一个以普通使用为目标地图编辑器,它使用简单而且能够轻松地在不同的游戏引擎中使用,其特性有:

    1、使用基于XML编码形的地图数据文件使用能够在不同游戏引擎中通用

    2、支持普通、45度两种视角

    3、对象的放置位置能够精确到像素

    4、支持图素、层次和对象等通用概念

    5、自己主动又一次加载图素集

    6、能够重置图素的大不和偏移

    7、支持图章刷和填充等高效工具

    8、支持以通用的格式输入输出来打开和存储文件

    開始Tiled地图编辑器编辑地图

    一、首先准备地图素材文件放至projectResources下,下载安装tiled-0.9.1-win32-setup.exe

    地址:http://www.mapeditor.org/

    二、启动Tiled,选择“文件-》新地图”,来新建地图project,弹出例如以下对话框设置地图的大小和图块大小和地图视角方向



    三、选择“地图-》新图块”导入图素文件,弹出例如以下对话框设置图块的大小、边距、偏移量及图块名称、源路径



    四、图块创建成功,右側显示图层名称及图块窗体中的图块,将图层名改动一下,点击工具栏上图章刷,点击一图块開始画地图



    五、在图层窗体加入对象层并重命名,并在对象层加入对象,选中新建的对象层,点击工具栏上“插入矩形”在地图上画一个矩形,大小无关紧要,我们主要用来在地图

    获取该x,y坐标,以在此放至精灵,右键刚刚加入矩形,选择对象属性,给它命个名称,然后点击确定。





    六、点击保存地图命名*.tmx至Resources


    七、编敲代码代码:

    CCTMXTiledMap瓦片地图集类是cocos2d-x中支持Tiled地图编码数据文件形式的类,用于解析地图集的数据文件。開始使用地图,增加代码:

    CCTMXTiledMap *pTMXTiledMap = CCTMXTiledMap::create("map.tmx");
    	pTMXTiledMap->setScale(0.8f);
    	pTMXTiledMap->setAnchorPoint( ccp(0.5f, 0.5f) );
    	pTMXTiledMap->setPosition(ccp(visibleSize.width/2 , visibleSize.height/2-300));
    
    	this->addChild(pTMXTiledMap);


    执行结果:

     

    八、Cocos2d-x 操作Tiled地图经常用法

    显示Tiled地图

    CCTMXTiledMap *map = CCTMXTiledMap::create("map3.tmx");
    	map->setAnchorPoint( ccp(0.5f, 0.5f) );
    	map->setPosition(ccp(visibleSize.width/2, visibleSize.height/2));
    	this->addChild(map);


    获取地图像素大小, width等于地图宽度块数*每块宽度,height 等于地图高度块数*每块高度

    	CCSize CC_UNUSED s = map->getContentSize();
    	CCLOG("ContentSize: %f, %f", s.width,s.height);


    获取地图层

    	CCTMXLayer *layer = map->layerNamed("layer1");//參数:地图层名称
    	CCSize m = layer->getLayerSize();//地图大小
    	CCLOG("LayerSize: %f, %f", m.width,m.height);


    获取对象层

    CCTMXObjectGroup *object = map->objectGroupNamed("object1");//參数:对象层名称


    获取对象

    CCDictionary *sprite_object = object->objectNamed("sprite1");//參数:对象名称


    获取对象坐标

    	float x = ((CCString*)sprite_object->objectForKey("x"))->floatValue();
    	float y = ((CCString*)sprite_object->objectForKey("y"))->floatValue();


    在坐标处增加精灵

    	CCSprite *sprite = CCSprite::create("sprite.png");
    	sprite->setScale(0.5f);
    	sprite->setAnchorPoint(ccp(0.0f, 0.0f));
    	sprite->setPosition(ccp(x, y));
    	this->addChild(sprite);


    当有多个地图层时,遍历地图层

    	CCArray* pChildrenArray = map->getChildren();
    	CCSpriteBatchNode* child = NULL;
    	CCObject* pObject = NULL;
    	CCARRAY_FOREACH(pChildrenArray, pObject)
    	{
    		child = (CCSpriteBatchNode*)pObject;
    
    		if(!child)
    			break;
    
    		child->getTexture()->setAntiAliasTexParameters();
    	}


    当有对象层有多个对象时,遍历全部对象

    	CCArray *obs = object->getObjects();
    	CCDictionary *dict=NULL;
    	CCObject *ob = NULL;
    	CCARRAY_FOREACH(obs, ob)
    	{
    		dict = (CCDictionary *)ob;
    		if (!dict)
    			break;
    
    		
    		int y = ((CCString*)dict->objectForKey("y"))->floatValue();
    		int x = ((CCString*)dict->objectForKey("x"))->floatValue();
    		int w = ((CCString*)dict->objectForKey("width"))->floatValue();
    		int h = ((CCString*)dict->objectForKey("height"))->floatValue();
    		CCLOG("sprite x: %d, y: %d, w: %d, h: %d", x, y, w, h);
    	}



    最后结果图:


    普通视角获取地图层四角图素

    CCTMXLayer *layer = map->layerNamed("layer1") ;
    	CCSize s = layer->getLayerSize();
    
    	CCSprite* sprite;
    	sprite = layer->tileAt(ccp(0,0));
    	sprite->setScale(2);
    	sprite = layer->tileAt(ccp(s.width-1,0));
    	sprite->setScale(2);
    	sprite = layer->tileAt(ccp(0,s.height-1));
    	sprite->setScale(2);
    	sprite = layer->tileAt(ccp(s.width-1,s.height-1));
    	sprite->setScale(2);


    将精灵作为了节点增加地图中
    m_tamara = CCSprite::create("nan.png");
    	map->addChild(m_tamara, map->getChildren()->count() );//将精灵作为子节点增加


    改动精灵与地图遮挡物关系

    //改动z轴的值并排序
    	CCPoint p = m_tamara->getPosition();
    	p = CC_POINT_POINTS_TO_PIXELS(p);
    	CCNode *map = getChildByTag(kTagTileMap);
    
    	int newZ = 4 - (p.y / 48);
    	newZ = max(newZ,0);
    
    	map->reorderChild(m_tamara, newZ); 



  • 相关阅读:
    面向对象
    6.jQuery基础_试题
    5.JavaScript操作BOM、DOM对象_试题
    css疑问
    JAVA学习笔记_五JAVA开发中的WEB前端技术
    java学习笔记_mysql随堂考试_错题
    java学习笔记④MySql数据库--03/04 DQL查询
    java学习笔记④MySql数据库--01/02 database table 数据的增删改
    java学习笔记③JAVA核心API编程-01集合框架和泛型
    java学习笔记②JAVA面向对象
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4265200.html
Copyright © 2011-2022 走看看