【原创作品, 欢迎转载,转载请在明显处注明! 谢谢。
原文地址:http://blog.csdn.net/comeontom/article/details/7933692】
这些天被cocos2dx如何读取xml困惑着,现在总结总结,如有错误,欢迎指正!
先新建一个cocos2dx的工程
HelloWorldScene.cpp中的代码如下:
#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下面存在hhhhh
comeontom
这些关键词,则输出最后一个
*/
CCLOG("pDict_2:%s",((CCString*)pDict_2->valueForKey("special_1"))->getCString());
/*第三层 下面说的是Array中包含string
special_2
comeontom1
comeontom2
comeontom3
*/
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
special_3
45.0
3
43.444
*/
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());
}
/*第三层
special_4
多媒体
*/
CCLOG("pDict_2:%s",((CCString*)pDict_2->valueForKey("special_4"))->getCString());
/*第三层
special_5
*/
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代码如下:
special
special_1
hhhhh
comeontom
special_2
comeontom1
comeontom2
comeontom3
special_3
45.0
3
43.444
special_4
多媒体
special_5
chinese1
美好的一天
japanese
良い一日を
spanish
Buen día
最后来个总结:
dict:建立字典
key:字典里面的关键词
integer:整形,其实和string、real的功能差不多,起配对作用
real:和integer、string的功能差不多,起配对作用
true:
false:
string:和integer、real的功能差不多,起配对作用
array:建立数组
当然了,有兴趣看源码的同学,可以看这个文件:CCFileUtilsCommon_cpp.h(位置:cocos2dx\platform)