首页 > 代码库 > cocos2d-x中的简单的数据存储
cocos2d-x中的简单的数据存储
Cocos2d-x中的数据存储方式很多,下面我来简单的介绍几种,有说的不准确的地方,大家指出来吧,共同学习进步。谢谢!
首先介绍的是 UserDefault 这个类:
//用userdefault进行数据存储 UserDefault::getInstance()->setStringForKey("testKey","testValue");//将String类型的数据存储起来 //读取上面写入的数据 std::string val = UserDefault::getInstance()->getStringForKey("testKey");//通过key来读取value log("%s",val.c_str()); /************************************************************************/ /*当然还有 int float 等等类型的存储,我就不多说了。 */ /************************************************************************/下面说一下简单的应用:保存游戏当前的状态,来个例子吧:
testUseDefault(); /************************************************************************/ /* 通过点击屏幕上面的精灵,移动精灵到新的位置,然后关闭程序,再次打开程序后,精灵在刚刚关闭前 移动后的位置 */ /************************************************************************/ //监听点击事件 auto listen = EventListenerTouchOneByOne::create(); listen->onTouchBegan =[=](Touch *t,Event *e){ startPos = t->getLocation();//获取当前点击的位置的坐标 auto spPos = sp->getPosition(); //判断是否点击了屏幕上的精灵 if (sp->getBoundingBox().containsPoint(startPos)){ return true;//点击在精灵上面 }else { return false; } }; listen->onTouchMoved = [=](Touch *t,Event *e){ endPos = t->getLocation(); sp->setPosition(endPos);//时刻改变精灵的位置 }; listen->onTouchEnded = [=](Touch *t,Event *e){ endPos = sp->getPosition(); //将当前精灵的位置存储起来 UserDefault::getInstance()->setFloatForKey("posx",endPos.x); UserDefault::getInstance()->setFloatForKey("posy",endPos.y); UserDefault::getInstance()->flush();//将数据立刻写入 }; //事件分发 Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listen,this);
void DataSaveLayer::testUseDefault(){ float posx = UserDefault::getInstance()->getFloatForKey("posx"); float posy = UserDefault::getInstance()->getFloatForKey("posy"); sp->setPosition(Vec2(posx,posy)); }
好了,UserDefault 这个类就说道这里吧。下面是 XML的读取
先来个XML文件吧,就按照这个读取(例子而已)
<Persons> <Person ID="1" TYPE="W"> <name>关羽</name> <attack>120</attack> </Person> <Person ID="2" TYPE="R"> <name>吕布</name> <attack>160</attack> </Person> <Person ID="3" TYPE="Q"> <name>马建杰</name> <attack>260</attack> </Person> </Persons>
/************************************************************************/ /* 解析XML文件的思路: 1. 获取到文件路径,创建解析器xmlDoc 2. 获取根节点Person 3. 取到子节点,然后取子节点的属性 */ /************************************************************************/ void DataSaveLayer::testXML(){ auto xmlFileName = FileUtils::getInstance()->fullPathForFilename("test.xml");//得到文件的位置 log("%s",xmlFileName.c_str());//验证是否正确 tinyxml2::XMLDocument xmlDoc;//声明一个解析器 xmlDoc.LoadFile(xmlFileName.c_str());//将文件盒解析器。。 XMLElement *root = xmlDoc.RootElement();//获取根节点 XMLElement *person = root->FirstChildElement();//拿到根节点的子节点person XMLElement *name = person->FirstChildElement();//拿到根节点的子节点的子节点(关羽) ps: 好绕口啊 log("%s",name->GetText()); XMLElement *attack = person->FirstChildElement("attack"); log("%d",atoi(attack->GetText())); //取属性 log("ID :%d",person->IntAttribute("ID"));//取根节点的子节点(Person)的属性 log("TYPE :%s",person->Attribute("TYPE")); //取第二个 子节点 XMLElement *person2 = person->NextSiblingElement("Person"); XMLElement *name2 = person2->FirstChildElement(); log("Name : %s",name2->GetText()); XMLElement *attack2 = person2->FirstChildElement("attack"); log("attack : %d",atoi(attack2->GetText())); log("ID :%d",person2->IntAttribute("ID")); log("TYPE : %s",person2->Attribute("TYPE")); }
好了,下面介绍一下 怎么创建XML
//创建xml文件 /************************************************************************/ /* 创建XML文件的步骤: 1.首先创建一个XML的解析器 2.用解析器创建一个节点作为根节点,用解析器创建 值 作为 根节点的值 3.用解析器创建一个节点作为根节点的子节点,用解析器创建 值 作为 根节点的子节点的值 好绕口。。 4.设置子节点的属性 5.同理。。。。创建第二个。。。第三个。。 */ /************************************************************************/ tinyxml2::XMLDocument *doc = new tinyxml2::XMLDocument(); XMLElement *root = doc->NewElement("Role");//创建一个节点 doc->LinkEndChild(root);//添加这个子节点作为最后一个孩子节点 auto sf = doc->NewElement("SF"); //解析器创建一个节点 root->LinkEndChild(sf);//让这个子节点作为 root最后的孩子节点 auto text = doc->NewText("majianjie");//sf显示的 sf->LinkEndChild(text); //添加属性 sf->SetAttribute("attack",43); sf->SetAttribute("hujia",4); sf->SetAttribute("speed",305); sf->SetAttribute("hp",495); auto dabaojian = doc->NewElement("dabaojian"); root->LinkEndChild(dabaojian); auto text1 = doc->NewText("daboajian"); dabaojian->LinkEndChild(text1); //为dabaojian 添加属性 dabaojian->SetAttribute("ada",342); dabaojian->SetAttribute("ads",343); dabaojian->SetAttribute("add",344); //取得可写的路径 auto fileName = FileUtils::getInstance()->getWritablePath()+"Dota.xml";//创建的XML文件就是 Dota.xml doc->SaveFile(fileName.c_str());//执行创建命令
执行创建命令后,会在proj.win32\Debug.win32目录下面创建 Dota.xml 的文件,显示如下:
明天再介绍json的相关内容吧。谢谢!
cocos2d-x中的简单的数据存储
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。