Yes,I got the path by calling getWritablePath(). But I can not find the plist file in that folder.
cm Y wrote:
Yes,I got the path by calling getWritablePath(). But I can not find the plist file in that folder.
even I can’t find the plist under resource folder , but I am able to read and write the file.
I used it to save 2d array, to save the state of game, it works like charm.Tested on device with iOS7.
you can use below code to save the game state. continue it
void SleepyFiver::saveGameState()
{
CCLog(“saveGameState”);
player->eatTimeDiff=(Constant::millisecondNow()-player->lastTime)/1000;
//http://www.cocos2d-x.org/forums/6/topics/41246
//http://pastebin.com/W0n4j8ct
//http://www.cocos2d-x.org/reference/native-cpp/V2.2/d7/d5f/classcocos2d_1_1_c_c_dictionary.html
int gScore=gameDistance+coinCount*2+goldNuggetCount*10;
CCUserDefault::sharedUserDefault()->setIntegerForKey("CURRENT_DISTANCE", gameDistance);
CCUserDefault::sharedUserDefault()->setIntegerForKey("CURRENT_COIN", coinCount);
CCUserDefault::sharedUserDefault()->setIntegerForKey("CURRENT_SCORE", totalScore);
CCUserDefault::sharedUserDefault()->setIntegerForKey("CURRENT_GOLD_NUGGET", goldNuggetCount);
CCUserDefault::sharedUserDefault()->setIntegerForKey("CURRENT_NOTE", noteCount);
//CCArray* array=CCArray::create();
CCDictionary * dictSlippyFiver = new CCDictionary();
int count=obstacleFaceCount;
CCLog("player->ANIM_TYPE :%d",player->ANIM_TYPE);
dictSlippyFiver->setObject(CCString::createWithFormat("%d",count),"obstacleFaceCount");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",player->ANIM_TYPE),"ANIM_TYPE");
dictSlippyFiver->setObject(CCString::createWithFormat("%f",player->ANIM_SPEED),"ANIM_SPEED");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",speedCount),"speedCount");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",currentSpeed),"currentSpeed");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",gameDistance),"gameDistance");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",LiveCountRemain),"LiveCountRemain");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",coinCount),"coinCount");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",goldNuggetCount),"goldNuggetCount");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",noteCount),"noteCount");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",player->SPEED_COUNT),"SPEED_COUNT");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",player->SPEED_MODE),"SPEED_MODE");
dictSlippyFiver->setObject(CCString::createWithFormat("%f",speed),"SPEED");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",player->ANIM_JUMPING_MODE),"ANIM_JUMPING_MODE");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",player->eatTimeDiff),"eatTimeDiff");
dictSlippyFiver->setObject(CCString::createWithFormat("%d",totalScore),"totalScore");
if(isValleyStart)
{
dictSlippyFiver->setObject(CCString::createWithFormat("%d",1),"isValleyStart");
}else
{
dictSlippyFiver->setObject(CCString::createWithFormat("%d",2),"isValleyStart");
}
if(isValley)
{
dictSlippyFiver->setObject(CCString::createWithFormat("%d",1),"isValley");
}else
{
dictSlippyFiver->setObject(CCString::createWithFormat("%d",2),"isValley");
}
dictSlippyFiver->setObject(CCString::createWithFormat("%f",playerRunningPosY),"playerRunningPosY");
CCDictionary* dictPlayer= new CCDictionary();
dictPlayer->setObject(CCString::createWithFormat("%f",player->getPositionX()),"x");
dictPlayer->setObject(CCString::createWithFormat("%f",player->getPositionY()),"y");
dictSlippyFiver->setObject(dictPlayer,"player");
CCArray* arrayObstacle=CCArray::create();
CCArray* arrayNote=CCArray::create();
CCArray* arrayCoin=CCArray::create();
CCArray* arrayGoldNugget=CCArray::create();
CCArray* arrayBackground=CCArray::create();
CCArray* array= SleepyFiver::getChildren();
for (int var = 0; var < array->count(); ++var) {
if(((CCSprite*)array->objectAtIndex(var))->getTag()==obstTag)
{
CCLog("Obstacle");
CCDictionary* dictObstacle= new CCDictionary();
dictObstacle->setObject(CCString::createWithFormat("%f",((Obstacle*)array->objectAtIndex(var))->getPositionX()),"x");
dictObstacle->setObject(CCString::createWithFormat("%f",((Obstacle*)array->objectAtIndex(var))->getPositionY()),"y");
dictObstacle->setObject(CCString::createWithFormat("%d",((Obstacle*)array->objectAtIndex(var))->index),"index");
arrayObstacle->addObject(dictObstacle);
}else if(((CCSprite*)array->objectAtIndex(var))->getTag()==Bird::TAG_BIRD_A||((CCSprite*)array->objectAtIndex(var))->getTag()==Bird::TAG_BIRD_B)
{
CCLog("Bird");
CCDictionary* dictObstacle= new CCDictionary();
dictObstacle->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionX()),"x");
dictObstacle->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionY()),"y");
dictObstacle->setObject(CCString::createWithFormat("%d",((CCSprite*)array->objectAtIndex(var))->getTag()),"index");
arrayObstacle->addObject(dictObstacle);
}else if(((CCSprite*)array->objectAtIndex(var))->getTag()==noteSpriteTag)
{
CCLog("noteSpriteTag");
CCDictionary* dictNote=new CCDictionary();
dictNote->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionX()),"x");
dictNote->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionY()),"y");
arrayNote->addObject(dictNote);
}else if(((CCSprite*)array->objectAtIndex(var))->getTag()==tagCoin)
{
CCLog("tagCoin");
CCDictionary* dictCoin=new CCDictionary();
dictCoin->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionX()),"x");
dictCoin->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionY()),"y");
arrayCoin->addObject(dictCoin);
}else if(((CCSprite*)array->objectAtIndex(var))->getTag()==tagGoldNugget)
{
CCLog("tagGoldNugget");
CCDictionary* dictGoldNugget=new CCDictionary();
dictGoldNugget->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionX()),"x");
dictGoldNugget->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionY()),"y");
arrayGoldNugget->addObject(dictGoldNugget);
}
if(((CCSprite*)array->objectAtIndex(var))->getTag()==tagBackgroundSky)
{
CCDictionary* dictBackground=new CCDictionary();
dictBackground->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionX()),"x");
dictBackground->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionY()),"y");
dictBackground->setObject(CCString::createWithFormat("%d",tagBackgroundSky),"tag");
arrayBackground->addObject(dictBackground);
CCLog("arrayBackground count tagBackgroundSky: %d",arrayBackground->count());
}
else if(((CCSprite*)array->objectAtIndex(var))->getTag()==tagStartValley)
{
CCDictionary* dictBackground=new CCDictionary();
dictBackground->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionX()),"x");
dictBackground->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionY()),"y");
dictBackground->setObject(CCString::createWithFormat("%d",tagStartValley),"tag");
arrayBackground->addObject(dictBackground);
CCLog("arrayBackground count tagStartValley: %d",arrayBackground->count());
}else if(((CCSprite*)array->objectAtIndex(var))->getTag()==tagEndValley)
{
CCDictionary* dictBackground=new CCDictionary();
dictBackground->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionX()),"x");
dictBackground->setObject(CCString::createWithFormat("%f",((CCSprite*)array->objectAtIndex(var))->getPositionY()),"y");
dictBackground->setObject(CCString::createWithFormat("%d",tagEndValley),"tag");
arrayBackground->addObject(dictBackground);
CCLog("arrayBackground count tagEndValley: %d",arrayBackground->count());
}
}
dictSlippyFiver->setObject(arrayObstacle,"Obstacle");
dictSlippyFiver->setObject(arrayNote,"Note");
dictSlippyFiver->setObject(arrayCoin,"Coin");
dictSlippyFiver->setObject(arrayGoldNugget,"GoldNugget");
dictSlippyFiver->setObject(arrayBackground,"background");
dictSlippyFiver->writeToFile("Slippy_Fiver.xml");
std::string path=CCFileUtils::sharedFileUtils()->getWritablePath();
path.append("Slippy_Fiver.xml");
CCLog("Sleepy_Fiver.plist path: %s", path.c_str());
CCUserDefault::sharedUserDefault()->setStringForKey("PATH_FOR_CONTINUE_GAME",path);
if(dictSlippyFiver->writeToFile(path.c_str()))
{
CCLog("Written file");
}else
{
CCLog("Written Failed");
}
CCLog("Children count :%d",SleepyFiver::getChildren()->count());
//SleepyFiver::getChildren()
CCInteger* gs1=(CCInteger*)dictSlippyFiver->valueForKey("gameDistance");
CCLog("gameDistance: %d", gs1->getValue());
CCDictionary* dict=CCDictionary::createWithContentsOfFile(path.c_str());
CCLog("Dict: %d",dict->retainCount());
CCString* gs=(CCString*)dict->objectForKey("gameDistance");
CCLog("gameDistance: %d", gs->intValue());
CCLog("saveGameState end");
}
void SleepyFiver::initContinueGame()
{
CCLog("initContinueGame");
std::string path=CCUserDefault::sharedUserDefault()->getStringForKey("PATH_FOR_CONTINUE_GAME");
CCDictionary* dict=CCDictionary::createWithContentsOfFile(path.c_str());
CCLog("Dict: %d",dict->retainCount());
CCString* gs=(CCString*)dict->objectForKey("gameDistance");
CCLog("gameDistance: %d", gs->intValue());
CCLog("11");
obstacleFaceCount=((CCString*)dict->objectForKey("obstacleFaceCount"))->intValue();
CCLog("12");
player->ANIM_TYPE=((CCString*)dict->objectForKey("ANIM_TYPE"))->intValue();
CCLog("ANIM_TYPE %d",player->ANIM_TYPE);
player->ANIM_SPEED=((CCString*)dict->objectForKey("ANIM_SPEED"))->floatValue();
player->SPEED_COUNT=((CCString*)dict->objectForKey("SPEED_COUNT"))->floatValue();
player->SPEED_MODE=((CCString*)dict->objectForKey("SPEED_MODE"))->floatValue();
player->eatTimeDiff=((CCString*)dict->objectForKey("eatTimeDiff"))->intValue();
player->eatTimeDiff*=1000;
if(((CCString*)dict->objectForKey("isValley"))->intValue()==1)
{
isValley=true;
}else
{
isValley=false;
}
if(((CCString*)dict->objectForKey("isValleyStart"))->intValue()==1)
{
isValleyStart=true;
}else
{
isValleyStart=false;
}
playerRunningPosY=((CCString*)dict->objectForKey("playerRunningPosY"))->floatValue();
totalScore=((CCString*)dict->objectForKey("totalScore"))->intValue();
CCLog("12");
speedCount=((CCString*)dict->objectForKey("speedCount"))->intValue();
CCLog("13");
//speedCount=((CCString*)dict->objectForKey("speedCount"))->intValue();
gameDistance=((CCString*)dict->objectForKey("gameDistance"))->intValue();
//LiveCountRemain=((CCString*)dict->objectForKey("LiveCountRemain"))->intValue();
coinCount=((CCString*)dict->objectForKey("coinCount"))->intValue();
CCLog("14");
goldNuggetCount=((CCString*)dict->objectForKey("goldNuggetCount"))->intValue();
CCLog("15");
noteCount=((CCString*)dict->objectForKey("noteCount"))->intValue();
speed=((CCString*)dict->objectForKey("SPEED"))->floatValue();
player->ANIM_JUMPING_MODE=((CCString*)dict->objectForKey("ANIM_JUMPING_MODE"))->intValue();
CCLog("ANIM_JUMPING_MODE %d",player->ANIM_JUMPING_MODE);
CCLog("1");
//SleepyFiver::setLive(LiveCountRemain);
CCLabelTTF* label1 = (CCLabelTTF*)getChildByTag(scoreLabel);
ostringstream convert; // stream used for the conversion
convert << totalScore;
label1->setString(convert.str().c_str());
CCLog("2");
player->setPosition(ccp(((CCString*)((CCDictionary*)dict->objectForKey("player"))->objectForKey("x"))->floatValue(),((CCString*)((CCDictionary*)dict->objectForKey("player"))->objectForKey("y"))->floatValue()));
if(player->ANIM_TYPE==Slippy::ANIM_IDLE)
{
player->initWithSpriteFrame((CCSpriteFrame*)pilotAnimation->characterArr->objectAtIndex(0));
}else if(player->ANIM_TYPE==Slippy::ANIM_JUMP)
{
player->initWithSpriteFrame((CCSpriteFrame*)pilotAnimation->characterArr->objectAtIndex(2));
}else if(player->ANIM_TYPE==Slippy::ANIM_RUN)
{
CCAnimation* rumAnim=CCAnimation::createWithSpriteFrames
(pilotAnimation->characterArr,player->ANIM_SPEED);
player->runAction(CCRepeatForever::create(CCAnimate::create(rumAnim)));
player->isRun=true;
}else if(player->ANIM_TYPE==Slippy::ANIM_JOGGING)
{
CCLog("ANIM_JOGGING");
player->runAction(CCSequence::create(CCCallFuncND::create(this,
callfuncND_selector(SleepyFiver::jogging), NULL),CCDelayTime::create(pilotAnimation->arrayCountAnim->count()*player->countFreq),CCCallFuncND::create(this,
callfuncND_selector(SleepyFiver::pauseOrPlayGame), NULL),NULL));
}else if(player->ANIM_TYPE==Slippy::ANIM_UNBOXING)
{
CCAnimation* animBoxOpen1=CCAnimation::createWithSpriteFrames(pilotAnimation->arrayBoxOpen,player->boxOpenFreq);
CCActionInterval* animBoxOpen=CCRepeat::create(CCAnimate::create(animBoxOpen1),1);
CCLog("ANIM_UNBOXING");
player->runAction(CCSequence::create(CCCallFuncND::create(this,callfuncND_selector(SleepyFiver::boxOpen),NULL), animBoxOpen,CCCallFuncND::create(this,
callfuncND_selector(SleepyFiver::jogging), NULL),CCDelayTime::create(pilotAnimation->arrayCountAnim->count()*player->countFreq),CCCallFuncND::create(this,
callfuncND_selector(SleepyFiver::pauseOrPlayGame), NULL),NULL));
}else if(player->ANIM_TYPE==Slippy::ANIM_SLIDE)
{
//player->ANIM_TYPE=Slippy::ANIM_SLIDE;
//player->stopAllActions();
CCActionInterval* rotateTo=CCRotateTo::create(0.0f, -90);
CCActionInterval* rotateToBack=CCRotateTo::create(0.0f,0);
CCFiniteTimeAction* action = CCSequence::create(rotateTo,CCDelayTime::create(0.40f),rotateToBack,CCCallFuncND::create(this,callfuncND_selector(SleepyFiver::GetPlayerDown),NULL),NULL);
player->runAction(action);
player->setPositionY(playerSlidingPosY);
}
CCLog("3");
CCArray* arrNote=(CCArray*)((CCDictionary*)dict)->objectForKey("Note");
if(arrNote->count()>0)
{
CCLog("gameDistance: %d", gs->intValue());
for (int var = 0; var < arrNote->count();++var) {
CCDictionary* dict =(CCDictionary*)arrNote->objectAtIndex(var);
//SleepyFiver::addNote(0.01);
noteSprite->setPosition(ccp(((CCString*)((CCDictionary*)dict)->objectForKey("x"))->floatValue(),((CCString*)(CCDictionary*)dict->objectForKey("y"))->floatValue()));
}
}
CCLog("4");
CCArray* arrObstacle=(CCArray*)((CCDictionary*)dict)->objectForKey("Obstacle");
if(arrObstacle->count()>0)
{
for (int var = 0; var <arrObstacle->count(); ++var) {
CCDictionary* dict =(CCDictionary*)arrObstacle->objectAtIndex(var);
SleepyFiver::addTargetContinueGame(((CCString*)((CCDictionary*)dict)->objectForKey("x"))->floatValue(),((CCString*)(CCDictionary*)dict->objectForKey("y"))->floatValue(),((CCString*)(CCDictionary*)dict->objectForKey("index"))->intValue());
}
}
CCLog("5");
CCArray* arrCoin=(CCArray*)((CCDictionary*)dict)->objectForKey("Coin");
if(arrCoin->count()>0)
{
for (int var = 0; var <arrCoin->count(); ++var) {
CCDictionary* dict =(CCDictionary*)arrCoin->objectAtIndex(var);
SleepyFiver::addCoinContinueGame(((CCString*)((CCDictionary*)dict)->objectForKey("x"))->floatValue(),((CCString*)(CCDictionary*)dict->objectForKey("y"))->floatValue(),tagCoin);;
}
}
CCArray* arrGoldNugget=(CCArray*)((CCDictionary*)dict)->objectForKey("GoldNugget");
if(arrGoldNugget->count()>0)
{
for (int var = 0; var <arrGoldNugget->count(); ++var) {
CCDictionary* dict =(CCDictionary*)arrGoldNugget->objectAtIndex(var);
SleepyFiver::addCoinContinueGame(((CCString*)((CCDictionary*)dict)->objectForKey("x"))->floatValue(),((CCString*)(CCDictionary*)dict->objectForKey("y"))->floatValue(),tagGoldNugget);;
}
}
CCArray* arrBackground=(CCArray*)((CCDictionary*)dict)->objectForKey("background");
CCLog("arrayBackground count : %d",arrBackground->count());
// if(arrBackground->count()==_backGround->count())
// {
//
// for (int var = 0; var <arrBackground->count(); ++var) {
// CCDictionary* dict =(CCDictionary*)arrBackground->objectAtIndex(var);
// ((Background*)_backGround->objectAtIndex(var))->setPositionX(((CCString*)((CCDictionary*)dict)->objectForKey("x"))->floatValue());//,((CCString*)(CCDictionary*)dict->objectForKey("y"))->floatValue()));
// }
// }
for (int var = 0; var <arrBackground->count(); ++var)
{
//(((CCDictionary*)dict)->objectForKey("tag"))->
CCDictionary* dict =(CCDictionary*)arrBackground->objectAtIndex(var);
if(((CCString*)((CCDictionary*)dict)->objectForKey("tag"))->intValue()==tagBackgroundSky)
{
((Background*)_backGround->objectAtIndex(var))->setPositionX(((CCString*)((CCDictionary*)dict)->objectForKey("x"))->floatValue());//,((CCString*)(CCDictionary*)dict->objectForKey("y"))->floatValue()));
}else if(((CCString*)((CCDictionary*)dict)->objectForKey("tag"))->intValue()==tagStartValley)
{
float scale =Constant::getValleyScale(screenSize);
Background* startValley=Background::create("gameplay_screen_valley_start.png");
startValley->setScale(scale);
startValley->BackgroundSize=CCSizeMake(startValley->getContentSize().width*scale,startValley->getContentSize().height*scale);
addChild(startValley,ZOrderGroundSky,tagStartValley);
_backGround->addObject(startValley);
schedule(schedule_selector(SleepyFiver::endValley),(4+rand()%4));
startValley->setPosition(ccp(0,startValley->BackgroundSize.height*.50));
startValley->setPositionX(((CCString*)((CCDictionary*)dict)->objectForKey("x"))->floatValue());//,((CCString*)(CCDictionary*)dict->objectForKey("y"))->floatValue()));
schedule(schedule_selector(SleepyFiver::endValley),(1+rand()%2));
}else if(((CCString*)((CCDictionary*)dict)->objectForKey("tag"))->intValue()==tagEndValley)
{
unschedule(schedule_selector(SleepyFiver::endValley));
float scale =Constant::getValleyScale(screenSize);
Background* endValley=Background::create("gameplay_screen_valley_end.png");
endValley->setScale(scale);
endValley->BackgroundSize=CCSizeMake(endValley->getContentSize().width*scale,endValley->getContentSize().height*scale);
_backGround->addObject(endValley);
endValley->setPosition(ccp(winSize.width,endValley->getContentSize().height*scale*.50));
addChild(endValley,ZOrderGroundSky,tagEndValley);
endValley->setPositionX(((CCString*)((CCDictionary*)dict)->objectForKey("x"))->floatValue());//,((CCString*)(CCDictionary*)dict->objectForKey("y"))->floatValue()));
}
}
CCLog("7");
if(player->ANIM_TYPE!=Slippy::ANIM_JOGGING&&player->ANIM_TYPE!=Slippy::ANIM_UNBOXING)
{
SleepyFiver::pauseOrPlayGame();
}
}