欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Cocos2d-x保存用戶游戲數(shù)據(jù)之XML文件是否存在問題判斷方法

 更新時間:2014年09月12日 09:53:26   作者:皂莢花  
這篇文章主要介紹了Cocos2d-x保存用戶游戲數(shù)據(jù)之XML文件是否存在問題判斷方法,請注意代碼中包含大量注釋,需要的朋友可以參考下

之前有寫過一篇博客介紹了游戲數(shù)據(jù)保存類CCUserDefault,主要介紹了幾個函數(shù)的使用,很是簡單,不了解的先看這篇文章。但是在實際做項目的時候發(fā)現(xiàn)如何判斷XML文件存在是個問題,試想一下用戶結(jié)束了游戲以后想打開APP繼續(xù)玩,卻發(fā)現(xiàn)還得重頭玩起,是不是會很失望啊,所以我們必須把用戶的數(shù)據(jù)保存起來,比如最高分、聲音的設(shè)置什么的。在這個過程中如何判斷XML文件就是一個問題,進過我的調(diào)試發(fā)現(xiàn)使用引擎提供的那個函數(shù)不能解決問題,現(xiàn)在采用如下的方法,大家看代碼吧。

//數(shù)據(jù)保存類的頭文件
#ifndef _USER_DATA_H_
#define _USER_DATA_H_
#include "cocos2d.h"

using namespace cocos2d;

//這個類同樣使用單例設(shè)計模式

class UserData
{
public:
	//以下的set和get方法都是用來設(shè)置和獲取游戲數(shù)據(jù)的
	bool getMusicValue();
	void setMusicValue(bool b);
	static UserData * sharedUserData();
	//在Appdelegate的析構(gòu)函數(shù)中調(diào)用,用來釋放m_userData數(shù)據(jù)成員
	void freeUserData();
private:
	//保存是否播放背景音樂的成員變量
	bool m_musicValue;
	static UserData * m_userData;
	//在構(gòu)造函數(shù)中來進行一些初始化的操作
	UserData();
};

#endif
#include "UserData.h"

//以下為單例設(shè)計模式的慣用寫法,所有的單例設(shè)計模式都類似,大家照著寫就行了
UserData * UserData::m_userData = NULL;

UserData * UserData::sharedUserData()
{
	if(m_userData == NULL)
	{
		m_userData = new UserData();
	}

	return m_userData;
}

void UserData::freeUserData()
{
	if(m_userData)
	{
		delete m_userData;
		m_userData = NULL;
	}
}

//在UserData的構(gòu)造函數(shù)中為游戲數(shù)據(jù)初始化
UserData::UserData()
{

	//不要調(diào)用CCUserDefault::sharedUserDefault()->isXMLFileExist()來判斷是否存在XML文件,因為當我們調(diào)用sharedUserDefalut()的時候
	//系統(tǒng)就會為我們初始化xml文件的,所以如果這么調(diào)用的話文件就永遠存在了。而使用CCUserDefault::isXMLFileExit()仍然解決不
  //了問題,這個時候無論什么時候啟動程序isXMLFileExist()都返回的是假,也就是文件永遠不存在了,經(jīng)過我的調(diào)試認為這倆個函數(shù)都不能解決問題
	//如果你有其他的發(fā)現(xiàn)請留言。這里我采用以下的方法進行處理,直接調(diào)用getBoolForKey函數(shù),第二個參數(shù)是說如果isExit不存在,則返回的是false
	//這樣的話,用戶第一次玩游戲的時候返回的是false,在if中會進行一些數(shù)據(jù)的初始化,并且保持在XML文件中,第二次調(diào)用的時候就會執(zhí)行else了
	//也就是從XML文件中取用戶的游戲數(shù)據(jù)了
	if(!(m_musicValue = CCUserDefault::sharedUserDefault()->getBoolForKey("isExit",false)))
	{
		CCUserDefault::sharedUserDefault()->setBoolForKey("isExit",true);
		//初始化游戲數(shù)據(jù),并且保存在XML文件中
		m_musicValue = true;
		CCUserDefault::sharedUserDefault()->setBoolForKey("m_musicValue",m_musicValue);
	}
	else
	{
		m_musicValue = CCUserDefault::sharedUserDefault()->getBoolForKey("m_musicValue");
	}
}

//返回用戶的聲音數(shù)據(jù)
bool UserData::getMusicValue()
{
	return this->m_musicValue;
}

//設(shè)置用戶的聲音數(shù)據(jù),并且保存在文件中,最后使用flush來刷新近XML文件中
void UserData::setMusicValue(bool b)
{
	this->m_musicValue = b;
	CCUserDefault::sharedUserDefault()->setBoolForKey("m_musicValue",this->m_musicValue);
	//在win32上這個函數(shù)的實現(xiàn)是空的
	CCUserDefault::sharedUserDefault()->flush();
}

以上的代碼是我寫的小例子忍者飛鏢中的一個類,現(xiàn)在只是加入了保存聲音數(shù)據(jù)的代碼,還在完善其他的一些問題,到時候會寫另一篇博客,大家就會看到完整的代碼了。

相關(guān)文章

最新評論