打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
CCDictionary文件读取
【原创作品, 欢迎转载,转载请在明显处注明! 谢谢。
原文地址:http://blog.csdn.net/comeontom/article/details/7933692
这些天被cocos2dx如何读取xml困惑着,现在总结总结,如有错误,欢迎指正!
先新建一个cocos2dx的工程
HelloWorldScene.cpp中的代码如下:
[cpp] view plaincopyprint?
#include "HelloWorldScene.h"
using namespace cocos2d;
CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
do
{
// 'scene' is an autorelease object
scene = CCScene::create();
CC_BREAK_IF(! scene);
// 'layer' is an autorelease object
HelloWorld *layer = HelloWorld::create();
CC_BREAK_IF(! layer);
// add layer as a child to scene
scene->addChild(layer);
} while (0);
// return the scene
return scene;
}
// on "init" you need to initialize your instance
bool HelloWorld::init()
{
bool bRet = false;
do
{
//////////////////////////////////////////////////////////////////////////
// super init first
//////////////////////////////////////////////////////////////////////////
CC_BREAK_IF(! CCLayer::init());
//////////////////////////////////////////////////////////////////////////
// add your codes below...
//////////////////////////////////////////////////////////////////////////
// 1. Add a menu item with "X" image, which is clicked to quit the program.
// Create a "close" menu item with close icon, it's an auto release object.
CCMenuItemImage *pCloseItem = CCMenuItemImage::create(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback));
CC_BREAK_IF(! pCloseItem);
// Place the menu item bottom-right conner.
pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20));
// Create a menu with the "close" menu item, it's an auto release object.
CCMenu* pMenu = CCMenu::create(pCloseItem, NULL);
pMenu->setPosition(CCPointZero);
CC_BREAK_IF(! pMenu);
// Add the menu to HelloWorld layer as a child layer.
this->addChild(pMenu, 1);
// 2. Add a label shows "Hello World".
// Create a label and initialize with string "Hello World".
//最外面的 CCDictionary
CCDictionary* pDict = CCDictionary::createWithContentsOfFile("strings.xml");
//第二层 CCDictionary
CCDictionary* pDict_2 = new CCDictionary();
pDict_2->retain();
pDict_2 = (CCDictionary*)pDict->objectForKey("special");
/*
如果在同一个key下面存在<string>hhhhh</string>
<string>comeontom</string>
<true></true>
这些关键词,则输出最后一个
*/
CCLOG("pDict_2:%s",((CCString*)pDict_2->valueForKey("special_1"))->getCString());
/*第三层  下面说的是Array中包含string
<key>special_2</key>
<array>
<string>comeontom1</string>
<string>comeontom2</string>
<string>comeontom3</string>
</array>
*/
CCArray* pArray2 = new CCArray();
pArray2->retain();
pArray2 = (CCArray*)pDict_2->objectForKey("special_2");
for (int i = 0;i < pArray2->count();i++)
{
CCLOG("pArray2%i:%s",i+1,((CCString*)pArray2->objectAtIndex(i))->getCString());
}
/*第三层  下面说的是Array中包含string
<key>special_3</key>
<array>
<integer>45.0</integer>
<integer>3</integer>
<integer>43.444</integer>
</array>
*/
CCArray* pArray3 = new CCArray();
pArray3->retain();
pArray3 = (CCArray*)pDict_2->objectForKey("special_3");
for (int i = 0;i < pArray3->count();i++)
{
CCLOG("pArray3%i:%s",i+1,((CCString*)pArray3->objectAtIndex(i))->getCString());
}
/*第三层
<key>special_4</key>
<real>多媒体</real>
*/
CCLOG("pDict_2:%s",((CCString*)pDict_2->valueForKey("special_4"))->getCString());
/*第三层
<key>special_5</key>
<false></false>
*/
CCLOG("pDict_2:%s",((CCString*)pDict_2->valueForKey("special_5"))->getCString());
CCLOG("strings.xmlCounts:%d",pDict->count());
CCLOG("pDict:%s",pDict);
CCArray* pArray = new CCArray();
pArray = pDict->allKeys();//把所有的键值付给pArray
for (int i = 0;i < pArray->count();i++)
{
CCLOG("pArray%i:%s",i+1,((CCString*)pArray->objectAtIndex(i))->getCString());
}
CCLabelTTF* pLabel = CCLabelTTF::create(((CCString*)pDict->objectForKey("chinese1"))->getCString(), "Arial", 24);
/*CCLabelTTF* pLabel = CCLabelTTF::create(((CCString*)pArray->objectAtIndex(3))->getCString(), "Arial", 24);*/
// CCLabelTTF* pLabel = CCLabelTTF::create("Hello World", "Arial", 24);
CC_BREAK_IF(! pLabel);
// Get window size and place the label upper.
CCSize size = CCDirector::sharedDirector()->getWinSize();
pLabel->setPosition(ccp(size.width / 2, size.height - 50));
// Add the label to HelloWorld layer as a child layer.
this->addChild(pLabel, 1);
// 3. Add add a splash screen, show the cocos2d splash image.
CCSprite* pSprite = CCSprite::create("HelloWorld.png");
CC_BREAK_IF(! pSprite);
// Place the sprite on the center of the screen
pSprite->setPosition(ccp(size.width/2, size.height/2));
// Add the sprite to HelloWorld layer as a child layer.
this->addChild(pSprite, 0);
bRet = true;
} while (0);
return bRet;
}
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
// "close" menu item clicked
CCDirector::sharedDirector()->end();
}
strings.xml代码如下:
[html] view plaincopyprint?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>special</key>
<string>
<dict>
<key>special_1</key>
<string>hhhhh</string>
<string>comeontom</string>
<true></true>
<key>special_2</key>
<array>
<string>comeontom1</string>
<string>comeontom2</string>
<string>comeontom3</string>
</array>
<key>special_3</key>
<array>
<integer>45.0</integer>
<integer>3</integer>
<integer>43.444</integer>
</array>
<key>special_4</key>
<real>多媒体</real>
<key>special_5</key>
<false></false>
</dict>
</string>
<key>chinese1</key>
<string>美好的一天</string>
<key>japanese</key>
<string>良い一日を</string>
<key>spanish</key>
<string>Buen día</string>
</dict>
</plist>
最后来个总结:
dict:建立字典
key:字典里面的关键词
integer:整形,其实和string、real的功能差不多,起配对作用
real:和integer、string的功能差不多,起配对作用
true:<true></true>如果这样写,输出的是1
false:<false></false> 输出的是0
string:和integer、real的功能差不多,起配对作用
array:建立数组
当然了,有兴趣看源码的同学,可以看这个文件:CCFileUtilsCommon_cpp.h(位置:cocos2dx\platform)
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
【玩转cocos2d-x之二十六】数据结构CCDictionary
C++调用Python浅析
String字符串的遍历
Cocos2d-x中CCEditBox文本输入框的使用实例
cocos2dx三种定时器的使用
C++11多线程std::thread的简单使用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服