Ошибка обновления счета в игре
У меня проблема, когда я обновляю счет в игре, я делаю, я не знаю, в чем проблема, но когда я снимаю что-то, счет должен увеличиваться на 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
Возможно, это связано с очень частым вызовом соответствующего события и очень быстрым обновлением элемента пользовательского интерфейса.