gpt4 book ai didi

ios - 如何在不产生无数节点的情况下更新分数?

转载 作者:行者123 更新时间:2023-11-28 18:59:04 25 4
gpt4 key购买 nike

我玩过这个游戏,当 Sprite 碰到边时,你就得一分。我想出了每次 Sprite 接触到侧面时增加分数的代码。我通过 NSLog 消息获得了正确的输出。

但是,当我通过将代码从 NSLog 更改为 SKLabelNode 来尝试相同的代码时,我得到了超过一千个节点(我认为这会影响性能并减慢游戏速度)。此外,当分数增加时,它与旧分数重叠,而不仅仅是增加分数。我已经在带有框架的更新中添加了代码。

代码如下:

- (void)printScore {
NSString *text = [NSString stringWithFormat:@"%ld",(long)userScore];
SKLabelNode *score = [SKLabelNode labelNodeWithText:text];

score.fontName = @"chalkduster";
score.fontSize = 45;
score.fontColor = [SKColor whiteColor];
score.position = CGPointMake(CGRectGetMidX(self.frame) + 175 ,CGRectGetMidY(self.frame) + 350);
[self addChild:score];
}

-(void)update:(CFTimeInterval)currentTime {
[self printScore];
}

我该如何解决这个问题,以便在不添加那么多 sprite 的情况下更新分数?

对不起,如果这是一个非常愚蠢的问题,我是菜鸟。

最佳答案

只添加一个属性:

@property (nonatomic, strong) SKLabelNode *scoreLabel;

并且只在 viewDidLoadinit 方法中创建一次:

_scoreLabel = [SKLabelNode initWithFontNamed:@"chalkduster"];
_scoreLabel.fontSize = 45;
_scoreLabel.fontColor = [SKColor whiteColor];
_scoreLabel.position = CGPointMake(CGRectGetMidX(self.frame) + 175 ,CGRectGetMidY(self.frame) + 350);
[self addChild:_scoreLabel];

然后仅当 Sprite 接触到边时才调用 printScore 方法,而不是像在 update 方法中那样在每一帧上调用:

- (void)printScore
{
NSString *text = [NSString stringWithFormat:@"%ld",(long)userScore];
self.scoreLabel.text = text;
}

希望对您有所帮助。

关于ios - 如何在不产生无数节点的情况下更新分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28327299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com