Search code examples
objective-cios7sprite-kit

how can i display score in other scene?


I have to show score with SKLabel in gameOverScene. how can i show score in GameOverScene Label? I am tried, please help me.

My game scene codes here. You can see all details about score in down stair.

MyScene.m

@interface MyScene ()<SKPhysicsContactDelegate>
@property NSUInteger score;
@end

-(void)setupUI
{
    self.score = 0;
    SKLabelNode *scoreLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
    scoreLabel.fontColor = [SKColor redColor];
    scoreLabel.fontSize = 20.0;
    scoreLabel.text = @"SCORE: 0";
    scoreLabel.name = @"scoreLabel";
    scoreLabel.verticalAlignmentMode = SKLabelVerticalAlignmentModeCenter;
    scoreLabel.position = CGPointMake(self.size.width/2, self.size.height - scoreLabel.frame.size.height);
    [self addChild:scoreLabel];
}

-(void)adjustScoreBy:(NSUInteger)points {
    self.score += points;
    SKLabelNode* score = (SKLabelNode*)[self childNodeWithName:@"scoreLabel"];
    score.text = [NSString stringWithFormat:@"SCORE: %lu", (unsigned long)self.score];
}
- (void)gameOver
{
    GameOverScene *gameOverScene = [GameOverScene sceneWithSize:self.size];
    [self.view presentScene:gameOverScene transition:[SKTransition pushWithDirection:SKTransitionDirectionLeft duration:0.5]];
}

GameOverScene.h

@interface GameOverScene : SKScene
@property NSUInteger *score;
@end

GameOverScene.m

@implementation GameOverScene
{
SKLabelNode *scoreLabel;
}

-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
    self.backgroundColor = [SKColor colorWithRed:1.5 green:1.0 blue:0.5 alpha:0.0];
    [self addStartButton];
    [self addRateButton];
    [self addBackButton];
    [self addScoreLabel];
}
return self;
}


-(void)addScoreLabel
{
scoreLabel = [SKLabelNode labelNodeWithFontNamed:@"Chalkduster"];
scoreLabel.text = [NSString stringWithFormat:@"SCORE: %lu", (unsigned long)self.score];
scoreLabel.position = CGPointMake(500, 50);
scoreLabel.name = @"gameOverScore";
[self addChild:scoreLabel];
}

Solution

  • There are several approaches to do this. You could use a singleton class to handle that. Other option would be to create a public score property in GameOverScene, and then pass the score value of MyScene to GameOverScene, something like this:

    In GameOverScene.h add a score property

    @interface GameOverScene : SKScene
    @property NSUInteger score;
    @end
    

    Then in you gameOver method set the score value

    - (void)gameOver
    {
       GameOverScene *gameOverScene = [GameOverScene sceneWithSize:self.size];
       gameOverScene.score = self.score;
       [self.view presentScene:gameOverScene transition:[SKTransition pushWithDirection:SKTransitionDirectionLeft duration:0.5]];
    }   
    

    In GameOverScene create didMoveToView

    - (void)didMoveToView:(SKView *)view
    {
       [self addScoreLabel];
    }