2014-01-13 46 views
2

我完全陌生的cocos2dx的ios遊戲開發和真的學習了很多從stackoverflow.Just要感謝所有的軟件coders.Now我的問題是我我與製作水平和高score.But遊戲還是沒能找到一種方法來存儲高分和cleared.When遊戲重新啓動所有的值設置爲初始值的水平,因爲沒有數據庫fetch.I已聽說cocos2d-x中的userdefault,但實際上找不到執行的方法。任何人都可以幫我做一個樣品。我會感激你如何將數據作爲數據庫存儲在cocos2dx(C++)的iOS遊戲

回答

4

CCUserDefault作爲一個鍵值對,並存儲對應於keys.Suppose要存儲高分你的遊戲,這樣的值時,用戶在退出後重新開始遊戲, Ë變化應堅持 爲此,在您的.cpp文件取一個const關鍵字值在頂部標題包含

const char *HIGH_SCORE="key1"; 

key1的是一個鍵後,該鍵必須要爲其申報 每一個爲const char *不同在這些行之後刪除init函數中的行,返回true語句。

if(!CCLayer::init()) 
{ 
return false; 
} 

不要刪除回報true.Then在你的初始化函數編寫如下代碼

CCUserDefault *def=CCUserDefault::sharedUserDefault(); 
def->setIntegerForKey(HIGH_SCORE, 2000); 
def->flush(); 

這裏DEF是一個指向CCUserDefault,它會幫助訪問在類的所有方法。 SetIntegerForKey是設置相應的整數值到恆定的char *的方法。 還有很多功能可以存儲字符串,浮點數,布爾值和雙精度值。

def->齊平()是刷新內容到XML文件的功能。它基本上將數據保存到XML文件

從密鑰檢索值,假設我們要檢索的高分,並顯示在標籤上

int high_score=def->getIntegerForKey(HIGH_SCORE); 

在這裏,我們整數轉換成字符串,以便我們可以顯示一個標籤

char s[4]; 
sprintf(s,"%d", high); 

上添加比分標籤

CCLabelTTF *high_label=CCLabelTTF::create(s, "Arial.fnt", 20); 
high_label->setPosition(ccp(200,200)); 
this->addChild(high_label); 

現在運行你的項目,你會看到2000在屏幕上

現在停止運行和註釋以下行

//def->setIntegerForKey(HIGH_SCORE, 2000); 
//def->flush(); 

再重新運行該項目,目前仍是價值2000的screen.It手段現在HIGH_SCORE存儲在XML文件和值從it.Therefore檢索到的變化仍然存在應用程序關閉後

3

如果你想存儲像高分的基本信息,當前等級等,那麼你可以使用CCUserDefault,如果你想存儲複雜的數據,那麼要麼你可以使用SQLiteCCDictionary

這裏是僞代碼存儲和檢索Cocos2dx-3.0高分:

const char* KEY_HIGH_SCORE = "high_score"; 

// Store High Score 
UserDefault::getInstance()->setIntegerForKey(KEY_HIGH_SCORE, 100); 

// Retrieve High Score. 
int high_score = UserDefault::getInstance()->getIntegerForKey(KEY_HIGH_SCORE);