更新游戏中的分数时出错

时间:2015-08-12 09:42:32

标签: ios objective-c sprite-kit skscene

当我在游戏中更新得分时我有问题我不知道问题是什么但是当我拍摄的东西时,得分应该增加1但是在我的代码中有时它会增加2或3有时1它不恒定我不知道为什么这里发生的是我使用的代码

@interface GameScene () {

    SKLabelNode* _scoreLabelNode;
    NSInteger _score;


}


-(void)didMoveToView:(SKView *)view {

    _score = 0;
        _scoreLabelNode = [SKLabelNode labelNodeWithFontNamed:@"Silom Regular"];
        _scoreLabelNode.fontSize = 50;
        _scoreLabelNode.position = CGPointMake(self.size.width - 335 , self.size.height - 60);
        _scoreLabelNode.zPosition = 100;
        [self addChild:_scoreLabelNode];

        _scoreLabelNode.text = [NSString stringWithFormat:@"%d",_score];
}

if (contact.bodyB.categoryBitMask == ObjectCategory) {

        _score++;
        _scoreLabelNode.text = [NSString stringWithFormat:@"%d",_score];
}

1 个答案:

答案 0 :(得分:1)

这个代表几乎没有类似的问题,看看这是否可以解决您的问题:

SpriteKit: didBeginContact being called non-stop on iPad

Why are didBeginContact called multiple times?

didBeginContact is being called multiple times for the same SKPhysicsBody

即使它无法解决您的问题,您也可以使用标志变量来处理此分数更新一次。如,

bool hasScoreUpdated;

- (void)didBeginContact:(SKPhysicsContact * _Nonnull)contact
{
    if(!hasScoreUpdated)
    {
        _score++;
        hasScoreUpdated = true;
    }
     // your rest of the logic
}

- (void)didEndContact:(SKPhysicsContact * _Nonnull)contact
{
    hasScoreUpdated = false;
}

修改

根据您的评论:

  

我把“NSLog(@”%d“,_score)”放在“_score ++”之后它应该增加   比如10 11 12 ..但是得分从10跳到12

这可能是由于经常调用相应的事件以及UI元素的快速更新。