达到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 ...
随机推荐
- JS--显示类型转换Number—隐式类型转换
显示类型转换 (强制类型转换):Number()parseInt()parseFloat() Number是整体转换--能够把一个看起来像数字的字符串转成数字--尽量去转换能转的都转了 var a = ...
- css布局详解(二)——标准流布局(Nomal flow)
css标准流布局(Nomal flow) 一.正常流 这是指西方语言中文本从左向右,从上向下显示,这也是我们熟悉的传统的HTML文档中的文本布局.注意,在非西方的语言中,流方向可能不同.大多数元素都在 ...
- 注意:"AspNetPager”的控件“AspNetPager1”必须放在具有 runat=server 的窗体标记内
应加: <form id="form1" runat="server"> </form> 否则一开始什么也不显示,页面控件看不见,加上a ...
- VS2010不能打开预编译的网站源码的原因是什么?(转之csdn)
原问题: 今天将写好的一个网站源码目录拷贝到另一台电脑上,但打开时提示: 你要打开一个预编译的网站,你可以查看该站点,但对它进行更改可能会造成该网站停止运行,若要修改站点,建议先编辑原始网站中的 ...
- Javascript的块级作用域
一.块级作用域的说明 在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c. ...
- Linux中的常见配置文件
网络服务端口 /etc/services
- C++深层复制解决指针悬挂
代码: #include <iostream> #include <cstring> using namespace std; class mystring{ public: ...
- Window7下手动编译最新版的PCL库
PCL简介 PCL是Point Cloud Library的缩写,是一个用于处理二维图像,三维深度图像和三维点云的C++库.该库是完全开源的,可免费用于商业和学术研究. 官方网站:http://poi ...
- Lua 字符串 匹配模式 总结
字符类 %a --字母alpha %d --数字double %l --小写字母lower %u --大写字母upper %w --字母和数字word %x -- 十六进制 %z --代表0 zero ...
- destoon实现商铺管理主页设置增加新菜单的方法
1.打开/lang/zh-cn/home.inc.php,找到9,10行替换如下: $HMENU = $DMENU = array('公司介绍', '供应产品', '采购清单', '新闻中心', '荣 ...