Ошибка обновления счета в игре

У меня проблема, когда я обновляю счет в игре, я делаю, я не знаю, в чем проблема, но когда я снимаю что-то, счет должен увеличиваться на 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 ответ

Решение

Есть несколько подобных проблем с этим делегатом, посмотрите, может ли это решить вашу проблему:

SpriteKit: didBeginContact вызывается круглосуточно на iPad

Почему BeginContact вызывается несколько раз?

didBeginContact вызывается несколько раз для одной и той же SKPhysicsBody

Даже если это не решит вашу проблему, вы можете использовать переменную flag, чтобы обработать это обновление оценки за один раз. например,

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

Возможно, это связано с очень частым вызовом соответствующего события и очень быстрым обновлением элемента пользовательского интерфейса.

Другие вопросы по тегам