0

我正在编写游戏,并使用 SKLabel 查看当前分数。问题是,当分数改变时,它现在不会在屏幕上显示变化,大约一秒钟后它会显示。我该怎么做才能看到我使用的那一刻的变化[sklabelscore setTextScore:++self.score]。我可以强制渲染或类似的东西吗?

当用户触摸敌人时,我调用 setTextScoretouchesBegan:withEvent:

setTextScore:实施是

SKLabelNode* scoreLabel=(SKLabelNode*)[self childNodeWithName:@"scoreLabel"];
scoreLabel.text=[NSString stringWithFormat:@"Score: %d",self.score];
4

2 回答 2

2

看起来++score你递增的很可能是一个局部变量,而不是self.score.

您按如下方式调用该方法:

[sklabelscore setTextScore:++score]

这意味着它的代码签名必须是:

-(void) setTextScore:(int)theNewScore
{
    SKLabelNode* scoreLabel=(SKLabelNode*)[self childNodeWithName:@"scoreLabel"];
    scoreLabel.text=[NSString stringWithFormat:@"Score: %d",self.score];
}

因此,您传入theNewScore但不是在您使用的格式字符串中使用它,如果增量变量是局部变量(即永远不会将其新值分配给),则该格式字符串self.score可能永远不会更新。++scoreself.score

于 2014-02-20T09:39:01.360 回答
1

解决了...我觉得自己像个白痴:S

问题是我在触摸敌人时淡出敌人,然后在 0.5 秒后更改标签。我把它排除在外,一切正常。

更改了 setTextScore: 方法,因为它是多余的(感谢 @LearnCocos2D)

...
SKAction* fade=[SKAction fadeOutWithDuration:0.5];
[node runAction:fade completion:^{
    [node removeFromParent];
    self.enemyNumber--;
    self.score++;
    SKLabelNode* scoreLabel=(SKLabelNode*)[self childNodeWithName:@"scoreLabel"];
    scoreLabel.text=[NSString stringWithFormat:@"Score: %d",self.score];
}];

新形式(块外):

...
self.score++;
SKLabelNode* scoreLabel=(SKLabelNode*)[self childNodeWithName:@"scoreLabel"];
scoreLabel.text=[NSString stringWithFormat:@"Score: %d",self.score];
SKAction* fade=[SKAction fadeOutWithDuration:0.5];
[node runAction:fade completion:^{
    [node removeFromParent];
}];

感谢您的帮助,很抱歉提出这个愚蠢的问题......

于 2014-02-20T10:04:25.003 回答