我是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]];
我希望能够实时显示当前分数。请帮忙。
答案 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];
}
这样你就可以保留你的单身人士,这在我看来是最好的做法。例如,如果玩家击败某个等级,您可能希望将他们的分数保持在下一个等级。