今天写的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 ...
随机推荐
-
Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
-
SQLServer------Join的使用方法
参考菜鸟教程网: http://www.runoob.com/sql/sql-join.html select a.Canteen,b.OrderNum,b.CreateTime,c.Name fro ...
-
catalina
用catalina启动tomcat容器,将项目放到tomcat中,通过cmd:启动:catalina,相当于本地的测试环境.
-
python logging 替代print 输出内容到控制台和重定向到文件
转自:http://blog.csdn.net/z_johnny/article/details/50740528
-
";Programming";和";Programming";是同一个";Programming";吗?
什么意思? C语言没有专门的字符串类型,但是,它同样可以处理字符串.本文不是讨论字符串的使用,而是讨论C字符串之间的关系.如题,在C语言代码中,如果定义#define STR = "Prog ...
-
xib和Storyboard 创建Cell的方式
xib 方式 .在Cell.h文件中加一个宏 #define cellIdentifier @"customCell" . ViewController中: - (void)vie ...
-
SDP(8):文本式数据库-MongoDB-Scala基本操作
MongoDB是一种文本式数据库.与传统的关系式数据库最大不同是MongoDB没有标准的格式要求,即没有schema,合适高效处理当今由互联网+商业产生的多元多态数据.MongoDB也是一种分布式数据 ...
-
POJ - 2253 Frogger 单源最短路
题意:给定n个点的坐标,问从第一个点到第二个点的最小跳跃范围.d(i)表示从第一个点到达第i个点的最小跳跃范围. AC代码 #include <cstdio> #include <c ...
-
MySQL Host is blocked because of many connection errors 解决方法
应用日志提示错误:create connection error, url: jdbc:mysql://10.45.236.235:3306/db_wang?useUnicode=true&c ...
-
BizTalk RosettaNet解决方案搭建
contoso为证书颁发机构 分别在两台服务器中配置hosts 192.168.199.160 fabrikam 192.168.199.225 contoso 安装CA 控制面板,添加删除程序 打开 ...