SKScene认可GameScene的高分

时间:2015-06-19 12:36:42

标签: ios objective-c iphone sprite-kit

我希望我的SKSceneMedalScene)能够识别GameScene的高分,因为如果高分是例如" 20"然后它会出现一枚奖牌。我怎么能这样做?

我在GameScene中获得高分的代码:

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:[NSString stringWithFormat:@"%d",_score] forKey:SCORE_OVER];

int scoreString=[[ud objectForKey:BEST_SCORE] intValue];
if(scoreString < _score){
    [ud setObject:[NSString stringWithFormat:@"%d",_score] forKey:BEST_SCORE];
    scoreString = _score;

这是我的MedalScene奖牌的当前代码:

if(scoreString >= 20){
    SKSpriteNode *medal1 = [SKSpriteNode spriteNodeWithImageNamed:@"medal_1"];
    medal1.position = CGPointMake(CGRectGetMaxX( self.frame )*1/4 + 8, CGRectGetMidY(self.frame) + 21);
    [self addChild:medal1];
}

我的GameScene显示了GameOver的得分以及高分。这就是代码:

-(void)showGameOver{

NSUserDefaults *hud = [NSUserDefaults standardUserDefaults];
[hud setObject:[NSString stringWithFormat:@"%d",_score] forKey:SCORE_OVER];

int scoreString = [[hud objectForKey:BEST_SCORE] intValue];
if(scoreString < _score){
    [hud setObject:[NSString stringWithFormat:@"%d",_score] forKey:BEST_SCORE];
    scoreString = _score;

SKLabelNode *lbOver = [SKLabelNode labelNodeWithFontNamed:@"Walibi0615"];
lbOver.position = CGPointMake(CGRectGetMaxX(self.frame)*3/4, CGRectGetMidY(self.frame)+33);
lbOver.zPosition = 1;
lbOver.fontSize = 20;
lbOver.fontColor = [UIColor blackColor];
lbOver.text = [NSString stringWithFormat:@"%d", _score];
[_gameOver addChild:lbOver];

SKLabelNode *lbMaxOver = [SKLabelNode labelNodeWithFontNamed:@"Walibi0615"];
lbMaxOver.position = CGPointMake(CGRectGetMaxX(self.frame)*3/4, CGRectGetMidY(self.frame)-14);
lbMaxOver.zPosition = 1;
lbMaxOver.fontSize = 20;
lbMaxOver.fontColor = [UIColor blackColor];
lbMaxOver.text = [NSString stringWithFormat:@"%d", scoreString];
[_gameOver addChild:lbMaxOver]; }

我创建了第二个场景(MedalScene),这个场景应该识别GameScene的scoreString,因为例如,如果高分等于20,那么它将在此场景中显示为奖牌。

这是奖牌的当前代码(MedalScene):

if(scoreString >= 20){
SKSpriteNode *medal1 = [SKSpriteNode spriteNodeWithImageNamed:@"medal_1"];
medal1.position = CGPointMake(CGRectGetMaxX( self.frame )*1/4 + 8, CGRectGetMidY(self.frame) + 21);
[self addChild:medal1]; }

我希望现在很清楚我的意思。预先感谢您的帮助! :)

1 个答案:

答案 0 :(得分:1)

您应该在设置后同步用户默认设置。

[ud synchronize];

我也会在你的userdefaults中使用真正的整数(i.s.o.手动转换为字符串),所以像

NSInteger score = [ud integerForKey:BEST_SCORE];
if (_score > score)  {
    [ud setInteger:_score forKey:BEST_SCORE];
    [ud synchronize];
}