我想制作像“乒乓球”这样的小型游戏。一切工作正常,但是现在,当我想添加一个分数时,游戏冻结了。我将此代码用于我的另一个项目,一切都很好。

这是score部分的代码:

-(void)scoreCount{
    score ++;
    if(scoreLabel == nil){

        scoreLabel = [SKLabelNode labelNodeWithFontNamed:@"ROTORcapExtendedBold"];
        scoreLabel.fontSize = 40;
        scoreLabel.position = CGPointMake(self.frame.size.width/2,self.frame.size.height/3);
        scoreLabel.zPosition = 0;
    }
    [self addChild:scoreLabel];
    scoreLabel.text = [NSString stringWithFormat:@"%ld",(long)score];
}


在控制台中,我收到以下消息:


  由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“试图添加已经具有父级的SKNode:名称:'(null)'文本:'1'fontName:'ROTORcapExtendedBold'位置:{189.33333,106.66666}”


删除scoreLabel == nil行后,该应用程序不会冻结,但是随后屏幕上的乐谱会复制旧乐谱并使该乐谱不可读。

我该如何解决?

最佳答案

[self addChild:scoreLabel]放在if语句中。

当前,您每次尝试更新标签时都试图将其添加到场景中,一旦标签已经在场景中就无法再次添加。

10-04 10:19