达到XML简单的动态配置
今天写的XML相关内容:随着上述眼前的小项目(等级类别)由于地图每个级别。因此,让他动态读取XML内容,这样的变化只能看到XML档。
简单的想法:第一次使用UserDefault类写入文件
UserDefault::getInstance()->setStringForKey("ID","2");
std::string value = UserDefault::getInstance()->getStringForKey("ID");
log("UserDefault: ID = %s",value.c_str());
这种话在 \proj.win32\Debug.win32以下生成的 UserDefault.xml 文件里的内容是:
以后仅仅要过关就向这个文件里写入下一关的 ID就能够了,而关卡的信息在以下的 config.xml中, 注意相应的ID
config.xml:
<Root>
<Stage ID = "1">
<name>map01.tmx</name>
<property1 one = "256" two = "168" three = "visSize.width/4" />
<property2 one = "480" two = "168" three = "visSize.width/17.1" />
<property3 one = "704" two = "168" three = "visSize.width/4" />
<property4 one = "144" two = "294" three = "visSize.width/3.5" />
<property5 one = "480" two = "294" three = "visSize.width/5.5" />
<property6 one = "816" two = "296" three = "visSize.width/3.4" />
<property7 one = "320" two = "424" three = "visSize.width/8" />
<property8 one = "672" two = "424" three = "visSize.width/8" />
</Stage>
<Stage ID = "2">
<name>map02.tmx</name>
<property1 one = "256" two = "168" three = "visSize.width/4" />
<property2 one = "480" two = "168" three = "visSize.width/17.1" />
<property3 one = "704" two = "168" three = "visSize.width/4" />
<property4 one = "144" two = "294" three = "visSize.width/3.5" />
<property5 one = "480" two = "294" three = "visSize.width/5.5" />
<property5 one = "816" two = "296" three = "visSize.width/3.4" />
<property5 one = "320" two = "424" three = "visSize.width/8" />
<property5 one = "672" two = "424" three = "visSize.width/8" />
</Stage>
<Stage ID = "3">
<name>map01.tmx</name>
<property4 one = "144" two = "294" three = "visSize.width/3.5" />
<property5 one = "480" two = "294" three = "visSize.width/5.5" />
<property6 one = "816" two = "296" three = "visSize.width/3.4" />
<property7 one = "320" two = "424" three = "visSize.width/8" />
<property8 one = "672" two = "424" three = "visSize.width/8" />
</Stage>
<Stage ID = "4">
<name>map02.tmx</name>
<property1 one = "256" two = "168" three = "visSize.width/4" />
<property2 one = "480" two = "168" three = "visSize.width/17.1" />
<property3 one = "704" two = "168" three = "visSize.width/4" /> </Stage>
</Root>
这些数据就是 每关地图的信息,依据须要自己能够配置。
以下我们就依据 UserDefault.xml 中的 ID 来 找到 config.xml 中相应的 关卡信息。!!
新建 一个场景吧。
。
。
.h文件
#pragma once #include "cocos2d.h"
#include "tinyxml2/tinyxml2.h" using namespace cocos2d;
using namespace tinyxml2; class One:public Scene{
public:
virtual bool init();
CREATE_FUNC(One);
static Scene *createScene(); XMLElement *Stage;
std::string ID; void addGround(int posX,int posY,int width);
};
.cpp文件:
#include "One.h"
#include "Two.h" Scene *One::createScene(){
Scene *scene = Scene::create();
auto layer = One::create();
scene->addChild(layer);
return scene;
} bool One::init(){
if (!Scene::initWithPhysics())
{
return false;
}
//可视区的大小
Size visSize = Director::getInstance()->getVisibleSize();
//显示边框,凝视了就不显示了
this->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL); UserDefault::getInstance()->setStringForKey("ID","2");//这里运行一次就ok了,生成文件就好了
std::string value = UserDefault::getInstance()->getStringForKey("ID");
log("UserDefault: ID = %s",value.c_str());
//找到文件
auto xmlFileName = FileUtils::getInstance()->fullPathForFilename("config.xml");//得到文件的位置
log("%s",xmlFileName.c_str());//验证是否正确 //创建解析器
tinyxml2::XMLDocument doc; doc.LoadFile(xmlFileName.c_str());//将文件盒解析器。 。 //获取根节点
XMLElement *root = doc.RootElement();
//
XMLElement *stage = root->FirstChildElement(); while (stage!=nullptr){
auto id = stage->Attribute("ID");
if (id == value){
ID = id;
Stage = stage;
}
stage = stage->NextSiblingElement();
}
//获取名字节点
XMLElement *name = Stage->FirstChildElement();
//获取名字节点的内容
auto content = name->GetText();
name = name->NextSiblingElement();
log("%s",content);
while (name!=nullptr){
//获取属性节点(位置)
auto one = name->Attribute("one");
auto two = name->Attribute("two");
auto three = name->Attribute("three");
log("%s,%s,%s",one,two,three); //画线
float _one = atof(one);
float _two = atof(two);
float _three = atof(three);
addGround(_one,_two,200); //这里的数据自己填写 name = name->NextSiblingElement();
}
return true;
} void One::addGround(int posX,int posY,int width){ //加入地板
//加入地板
auto ground = Sprite::create();//就是一个精灵
ground->setPhysicsBody(PhysicsBody::createBox(Size(width,3)));
ground->setTextureRect(Rect(0,0,width,3));//设置纹理的 宽 高
ground->setPosition(Vec2(posX,posY));//设置地板的 位置
ground->getPhysicsBody()->setDynamic(false);
this->addChild(ground);
}
这样就好了,仅仅要你想读取哪一个关卡的信息 就直接在 UserDefault.xml中改动 ID即可了。假设想配置关卡的信息。直接 改动 config.xml文件即可了!感觉这样会略微省事一点,假设哪里不正确请吐槽,一起学习进步,谢谢!
执行界面例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFqaWFuamll/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbWFqaWFuamll/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
版权声明:本文博主原创文章。博客,未经同意不得转载。
达到XML简单的动态配置的更多相关文章
- Winform中实现读取xml配置文件并动态配置ZedGraph的RadioGroup的选项
场景 Winform中对ZedGraph的RadioGroup进行数据源绑定,即通过代码添加选项: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...
- Quartz实现JAVA定时任务的动态配置
什么是动态配置定时任务? 首先说下这次主题,动态配置.没接触过定时任务的同学可以先看下此篇:JAVA定时任务实现的几种方式 定时任务实现方式千人千种,不过基础的无外乎 1.JDK 的Timer类 2. ...
- RDLC报表系列(一) 简单的动态数据绑定和配置
RDLC系列链接 RDLC报表系列(一) 简单的动态数据绑定和配置 RDLC报表系列(二) 行分组 RDLC报表系列(三) 总计和折叠 RDLC报表系列(四) 矩阵 RDLC报表系列(五) 简单的图 ...
- 4、android xml中drawableTop(drawableBoottom、drawableLeft、drawableRight)在java代码中的动态配置
做安卓开发的朋友都知道,我们在xml中可以通过这样来对button设置其上部或者(下.左.右)的图片资源: 那么如果需要动态配置图片呢?我们不得不使用java代码来进行操作: Drawable dra ...
- MyBatis 使用简单的 XML或注解用于配置和原始映射
MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis .My ...
- log4j.xml简单配置实现在控制台打印sql执行语句【加注释】
转: log4j.xml简单配置实现在控制台打印sql执行语句 2017年09月27日 13:02:34 艾然丶 阅读数 8804 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协 ...
- hystrix(一) 简单使用, 以及动态配置更新
本文转载自https://my.oschina.net/u/1169457/blog/1787414 hystrix 简单使用, 以及动态配置更新 概述 只介绍同步模式下简单的使用, 有助于快速接入, ...
- 使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置
1.使用java代码动态配置与xml文件结合的方式使用mybatis-generator生成代码配置 2.上代码:在resources目录下新建:generatorConfiguration.xml文 ...
- 通过Dapr实现一个简单的基于.net的微服务电商系统(十七)——服务保护之动态配置与热重载
在上一篇文章里,我们通过注入sentinel component到apigateway实现了对下游服务的保护,不过受限于目前变更component需要人工的重新注入配置以及重启应用更新componen ...
随机推荐
- oracle卸载Oracle Clusterware(转载)
1.脚本自动删除 切换到root用户 $Su – root #cd $ORA_CRS_HOME/install 1.执行rootdelete.sh脚本 # ./rootdelete.sh 2.执行ro ...
- T4文本模板
<#...#> 可以包含语句 <#=...#> 用于表达式,提供“输出”操作 <#+ ...> 使用类功能控制块向文本模板添加方法.属性.字段,必须作为文件中最后 ...
- ORACLE SQL 组函数【weber出品必属精品】
组函数:对一组数据进行加工,每组数据返回一个值 常用的组函数:count() avg() max() min() sum() count()函数 1. count(*) :返回总共的行 ...
- c++ 编译期计算 (一)
编译期就是编译器进行编译,产生.obj文件的所处的那一段时间(如果是广义的编译期,那么一般还包括了链接期,因为现在很多编译器都会自动调用链接器进行链接)执行期就是你执行某个已经链接好的程序的那段时间. ...
- 【Nutch2.3基础教程】集成Nutch/Hadoop/Hbase/Solr构建搜索引擎:安装及运行【集群环境】
1.下载相关软件,并解压 版本号如下: (1)apache-nutch-2.3 (2) hadoop-1.2.1 (3)hbase-0.92.1 (4)solr-4.9.0 并解压至/opt/jedi ...
- CSS3 基础知识
CSS3 基础知识1.边框 1.1 圆角 border-radius:5px 0 0 5px; 1.2 阴影 box-shadow:2px 3px 4px 5px rgba(0,0,0 ...
- C#编程实现朴素贝叶斯算法下的情感分析
C#编程实现 这篇文章做了什么 朴素贝叶斯算法是机器学习中非常重要的分类算法,用途十分广泛,如垃圾邮件处理等.而情感分析(Sentiment Analysis)是自然语言处理(Natural Lang ...
- Jasper_crosstab_columngroup header position config - (headerPosition="Stretch")
Position of Totals RowThe totalPosition attribute controls the appearance of the row that displays t ...
- 《转》ACTIONBAR-PULLTOREFRESHLIBS+沉浸式在部分手机上的布局错乱,目前知道的三星系统(TouchWiz)
转载:http://www.cnblogs.com/wubingshenyin/p/4413672.html(原文连接) 前段时间看见ActionBar-PullToRefreshLibs用来刷新很好 ...
- getResources().getXml()获取xml
获取XML文件的基本思路是,通过getResources().getXml()获的XML原始文件,得到XmlResourceParser对象,通过该对象来判断是文档的开头还是结尾,是某个标签的开始还是 ...