2011-12-08 43 views
3

我使用android cocos2d計算遊戲項目中的分數,在完成第一級後進入下一級,所以我想存儲第一級分數並添加下一級別的分數。我怎麼能在android-cocos2d中存儲這個分數。如何在android中存儲遊戲分數cocos2d

+0

您是否在談論節省設備中的分數負載? [保存在文件中?] – Jimmar

回答

1

聽起來像你實際要求的是如何存儲應用程序的數據,這在技術上與cocos2d無關,因爲這只是一個2D渲染/圖形引擎。

您可以爲您的應用程序創建一個customer content provider這將爲您提供一個數據庫來存儲您的數據,但是這種方法通常最適合於當您希望其他應用程序能夠訪問您的應用程序數據時。你也可以使用一種更加快速和骯髒的方法,採用SharedPreferences方法。

Android的持久性有很好的描述here

3

使用的NSKeyedArchiver類來存儲,在這裏你有一個例子:

-------------寫

 // get allowed save paths 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     // string for the default path 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
     // full path plus filename for save game 
NSString *gameStatePath = [documentsDirectory stringByAppendingPathComponent:@"gameState.dat"]; 
     // storage for game state data 
NSMutableData *gameData = [NSMutableData data]; 
     // keyed archiver 
NSKeyedArchiver *encoder = [[NSKeyedArchiver alloc] initForWritingWithMutableData:gameData]; 
     // encode all variables we want to track 
       [encoder encodeObject:[player inventoryDict] forKey:@"playerInventoryDict"]; 
       [encoder encodeObject:[player equippedDict] forKey:@"playerEquippedDict"]; 
       [encoder encodeInt:[player initialActionPoints] forKey:@"playerInitialActionPoints"]; 
       [encoder encodeInt:[player actionPoints] forKey:@"playerActionPoints"]; 
       [encoder encodeInt:[player experiencePoints] forKey:@"playerExperiencePoints"]; 
       [encoder encodeInt:[player xpNextLevel] forKey:@"playerXPNextLevel"]; 
       [encoder encodeBool:[player isThinking] forKey:@"playerIsThinking"]; 
     // finish, write and release the encoder 
[encoder finishEncoding]; 
[gameData writeToFile:gameStatePath atomically:YES]; 
[encoder release]; 

-----------------從閱讀

// get allowed save paths 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
      // string for the default path 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
      // full path plus filename for save game 
    NSString *gameStatePath = [documentsDirectory stringByAppendingPathComponent:@"gameState.dat"]; 
      // storage for game state data 
    NSMutableData *gameData = [NSMutableData data]; 
      // start the decoder 
    NSKeyedUnarchiver *decoder = [[NSKeyedUnarchiver alloc] initForReadingWithData:gameData]; 

      // start with player data 
    PlayerEntity *player = [PlayerEntity player]; 

     // variables from the PlayerEntity Class 
player.inventoryDict = (NSDictionary *)[decoder decodeObjectForKey:@"playerInventoryDict"]; 
player.equippedDict = (NSDictionary *)[decoder decodeObjectForKey:@"playerEquippedDict"]; 
player.initialActionPoints = [decoder decodeIntForKey:@"playerInitialActionPoints"]; 
player.actionPoints = [decoder decodeIntForKey:@"playerActionPoints"]; 
player.experiencePoints = [decoder decodeIntForKey:@"playerExperiencePoints"]; 
player.xpNextLevel = [decoder decodeIntForKey:@"playerXPNextLevel"]; 
player.isThinking = [decoder decodeBoolForKey:@"playerIsThinking"]; 

     // release the decoder 
[decoder release]; 

原始代碼

1

對於簡單處理得分:可以使用靜態變量,如「static int myscore;」並在其上應用一些邏輯,否則使用sqlite來處理分數事件.... !!!!

+0

「http://developer.android.com/training/basics/data-storage/shared-preferences.html」 –

0

我猜如果你在java中使用cocos2d作爲android端口,那麼在C中的這個答案可能不會立即對你有用。這裏有一些想法。 首先,簡單的方法是創建一個數據庫,您可以讀取和寫入分數數據。這將是任何Android應用程序相同。 有一個cocos2d的Android應用程序,多數民衆贊成了開放源代碼和實現這個..

http://denvycom.com/blog/step-by-step-guide-on-how-to-build-your-first-slider-puzzle-game-in-cocos2d-for-android-part-1/

一個具體的例子可以在這裏找到... https://github.com/chuvidi2003/GidiGames/blob/master/src/com/denvycom/gidigames/PuzzleLayer.java

mDbHelper = new DbAdapter(appcontext); 
 
\t \t mDbHelper.open(); 
 
\t \t String labelmoves; 
 

 
\t \t Cursor ScoreCursor = mDbHelper.fetchPuzzleBest("puzzlemania", GidiGamesActivity.currentpuzzletype,String.valueOf(NUM_ROWS)); // mDbHelper.fetchBestScore("puzzlemania", ""); 
 
\t \t if(ScoreCursor.getCount() > 0){ 
 
\t \t \t ScoreCursor.moveToFirst(); 
 
\t \t \t labelmoves = ScoreCursor.getString(ScoreCursor.getColumnIndex(
 
\t \t \t \t \t DbAdapter.KEY_GAME_MOVES)) ; 
 
\t \t }

以上簡單提取數據庫中的一些「移動」數據。 也可以使用類似的方法將數據保存到數據庫。 查看下面的鏈接瞭解更多關於android中的數據庫交互的信息 http://developer.android.com/training/basics/data-storage/databases.html

最好。