为什么我的分数没有在Sprite Kit中实时显示?

时间:2014-05-06 13:16:36

标签: xcode5 sprite-kit

我是Sprite Kit的全新开发人员。我几乎已经完成了我的第一个游戏,但我仍然坚持使用代码来实时显示不断变化的分数。我花了很多天努力,研究解决方案而没有任何结果,所以我最终决定在这里发帖,希望得到答案:

我在myScene中创建了一个分数标签节点并创建了此方法

-(void)adjustScoreBy:(NSUInteger)points 
{

BOOL updateHud = YES;
updateHud += points;
[GameState sharedInstance].score += points;
[scoreLabel setText: [NSString stringWithFormat:@"Score: %d", [GameState sharedInstance].score]];

}

我创建了一个像魅力一样的GameState,并在我的GameOver场景中显示得分和高分,但是当我玩myScene时它不会实时更新得分。相反,它显示了我上次玩游戏时的前一个分数的最终结果,在我整个当前游戏中保持静态,而且直到下一个GameOver场景再次与高分一起,我无法看到当前分数。 / p>

最后,这是我调用分数更新的方式:

[self adjustScoreBy:5];
[scoreLabel setText: [NSString stringWithFormat:@"Score: %d", [GameState sharedInstance].score]];

我希望能够实时显示当前分数。请帮忙。

2 个答案:

答案 0 :(得分:0)

我通过修改代码修复了实时问题,如下所示:

-(void)adjustScoreBy:(NSUInteger)points

{
self.score += points;
SKLabelNode* score = (SKLabelNode*)[self childNodeWithName:kScoreHudName];
score.text = [NSString stringWithFormat:@"Score: %d", (int)self.score];

[GameState sharedInstance].score += points;
   SKLabelNode* scoreLabel = (SKLabelNode*)[self childNodeWithName:kScoreHudName];

[scoreLabel setText: [NSString stringWithFormat:@"Score: %d", [GameState sharedInstance].score]];

}

然而,我现在面临一个新问题,我完全正常工作的实时得分进入下一场比赛,并将新得分添加到旧的......

答案 1 :(得分:0)

如果在GameState单例中添加方法,修复分数未重置的问题应该很容易。

试试这个:


    GameState.h
    -(void)reset; // declare your new method

    GameState.m
    -(void)reset {
        self.score = 0;
    }

游戏结束后,我建议调用一种可以在游戏场景中重置场景的方法。这基本上就是@nacross所说的,但这样你仍然可以使用你的GameState。



    MyScene.m // or whatever your game scene is
    -(void)resetScene {
    [[GameState sharedInstance] reset];
    }

这样你就可以保留你的单身人士,这在我看来是最好的做法。例如,如果玩家击败某个等级,您可能希望将他们的分数保持在下一个等级。