HelloWorld.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下面存在<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:
```xml
<?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:如果这样写,输出的是1
false: 输出的是0
string:和integer、real的功能差不多,起配对作用
array:建立数组
当然了,有兴趣看源码的同学,可以看这个文件:CCFileUtilsCommon_cpp.h(位置:cocos2dx\platform)