2014-03-06 59 views
0

我被困在試圖通過兩個場景,MyScene和MyMenu之間的分數。 其中分值的變化被聲明爲_score(NSInteger的),它的標籤是_scoreLabelNode(SKLabelNode),我用於初始化標籤,並創建包含在MyScene比分是Sprite Kit:如何在不同場景之間傳遞分數?

_score = 0; 
_scoreLabelNode = SKLabelNode labelNodeWithFontNamed:@"MarkerFelt-Wide; 
_scoreLabelNode.position =CGPointMake (CGRectGetMidX(self.frame), 3 *self.frame.size.height /4); 
_scoreLabelNode.zPosition = 100; 
_scoreLabelNode.text = [NSString stringWithFormat:@"%d",_score]; 
_scoreLabelNode.fontColor =[UIColor blackColor]; 
[self addChild:_scoreLabelNode] 
標籤代碼中的遊戲部分

所以我想我的問題是,當MyScene中的分數需要更改時,如何在兩個場景之間傳輸分數,並且需要顯示用戶在MyMenu中獲得的分數。提前致謝。

PS:我剛學代碼,所以我將不勝感激一個詳細的答覆

回答

1

NSUserDefaults的使用,像這樣在MyScene:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
[prefs setInteger:_score forKey:@"score"]; 

而且在MyMenu菜單:

NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
int score = [prefs integerForKey:@"score"]; 
SKLabelNode *scoreLabel = [SKLabelNode labelNodeWithFontNamed:@"MarkerFelt-Wide"]; 
//Other label node configuration here 
scoreLabel.text = [NSString stringWithFormat:@"%d",score] 
//Other configuration here 

這可能不是很正確,寫下來我的頭頂。 Xcode將幫助您解決任何警告/錯誤。

+0

我在哪裏可以把每個代碼?在接口或實現? – yasgur99

+0

我把這兩個都放在每個文件的.m's的實現部分中。這導致了和以前一樣的事情。無論我得到什麼,分數都是0。我是否應該刪除每個中的_scoreLabelNode代碼?並且我應該刪除_和_scoreLabelNode中的節點,因爲你寫的SKLabelNode是scoreLabel?我是否必須在界面中聲明任何內容? – yasgur99

+0

我同意@nathreed。在應用程序啓動時(在應用程序委託didFinishLaunching方法中),如果userDefaults值返回nil,您可能需要將分數設置爲0。然後當你的菜單出現時,你可以通過獲取用戶默認值來更新你的分數。你將不得不添加到MyScene的用戶默認值 –

0

您也可以使用MyMenu場景的userData屬性。

- (void) goToMenuScene 
{ 
     SKView *spriteView = (SKView *) self.view; 
     SKScene *newScene = [[MyMenu alloc]initWithSize:self.size]; 

     NSMutableDictionary *dic = [[NSMutableDictionary alloc]init] 
     [dic setInteger:_score forKey:@"score"]; 
     newScene.userData = dic; 

     [spriteView presentScene:newScene]; 

} 

在你想呈現場景的點,叫

[self goToMenuScene]; 

而在MyMenu菜單現場,

int score = [[self.userData objectForKey:@"score"]intValue]; 
+0

我收到的MyScene和「無可見界面‘的NSMutableDictionary’宣佈選擇「integerForKey」你是如何調用該方法的MyMenu – yasgur99

+0

「未聲明的標識符‘goToMenuScene’的使用」?你需要寫[self goToMenuScene]; – ZeMoon

+0

查看編輯答案 – ZeMoon

0

我想設置我的成績在一經推出應用程序的委託與像

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    //SETUP SCORE 
    [[NSUserDefaults standardUserDefaults] synchronize]; 
    NSInteger *score = [[NSUserDefaults standardUserDefaults] integerForKey:@"hasAnsweredQuestion"]; 
    if (!score) { 
      //SET SCORE AS nathreed SUGGESTS 
    } 

B同樣你可以檢查是否有一個分數,每次在菜單ViewController

祝你好運!

0

我喜歡akashg的回答,但是這裏有一個更簡單的替代方法。

您可以聲明分數屬性MyMenu.h文件。

@property (nonatomic, assign) int score; 

然後,在你的MyScene.m文件...

- (void) goToMyMenuScene 
{ 
    SKScene *myMenuScene = [[MyMenu alloc]initWithSize:self.size]; 
    myMenuScene.score = _score; 
    [self.view presentScene:myMenuScene]; 
} 
相關問題