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



  • 相关阅读:
    ORACLE 查看进程数,已执行任务数, 剩余任务数,删除指定任务
    ORACLE 收集统计整个用户数据
    解决Hystrix dashboard Turbine 一直 Loading…… 及其他坑
    利用 Maven 构造 Spring Cloud 微服务架构 模块使用 spring Boot构建
    AES加解密
    JAVA POI XSSFWorkbook导出扩展名为xlsx的Excel,附带weblogic 项目导出Excel文件错误的解决方案
    JAVA 文件的上传下载
    shell启停服务脚本模板
    JAVA 设计模式之 原型模式详解
    JAVA 设计模式之 工厂模式详解
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4265200.html
Copyright © 2020-2023  润新知