user3955948
user3955948

Reputation:

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];
}

Upvotes: 1

Views: 135

Answers (2)

Lucas Domene
Lucas Domene

Reputation: 284

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];
}

Upvotes: 2

Gil Sand
Gil Sand

Reputation: 6040

You just need a property in your next scene (target class) and call it from (void)gameOver (in the source class)

Add it int your target class like this

@property int score;

then use it like this in your source class

gameOverScene.score = self.score

You will use this kind of stuff a lot for when moving data around.

Upvotes: 0

Related Questions