Я использовал чужой код для написания таймера в SpriteKit и немного его подправил. Вот как выглядит мой код:
- (void)createTimerWithDuration:(NSInteger)seconds position:(CGPoint)position andSize:(CGFloat)size
{
// Allocate/initialize the label node.
_countdownClock = [SKLabelNode labelNodeWithFontNamed:@"Avenir-Black"];
_countdownClock.fontColor = [SKColor blackColor];
_countdownClock.position = position;
_countdownClock.horizontalAlignmentMode = SKLabelHorizontalAlignmentModeLeft;
_countdownClock.fontSize = size;
[self addChild:_countdownClock];
// Initialize the countdown variable.
_countdown = seconds;
// Define the actions.
SKAction *updateLabel = [SKAction runBlock:^{
_countdownClock.text = [NSString stringWithFormat:@"Time Left: 0:%lu", (unsigned long)_countdown];
_countdown--;
}];
SKAction *wait = [SKAction waitForDuration:1.0];
// Create a combined action.
SKAction *updateLabelAndWait = [SKAction sequence:@[updateLabel, wait]];
// Run action "seconds" number of times and then set the label to indicate the countdown has ended.
[self runAction:[SKAction repeatAction:updateLabelAndWait count:seconds] completion:^{
_countdownClock.text = @"GAME OVER!";
_gameOver = YES;
[self runAction:_gameOverSound];
}];
}
Что я хочу, так это то, что когда запускается определенный блок кода (о котором я позаботился сам), я хочу добавить 10 секунд к таймеру.
Я уже пытался сделать это, добавив постоянную переменную экземпляра с именем _countTime
для первоначального хранения 60 секунд. В методе -init я вызывал [self createTimerWithDuration:_countTime position:_centerOfScreen andSize:24];
. Внутри этой функции я уменьшал _countTime
каждый раз, когда уменьшались «секунды» — другими словами, каждую секунду уменьшалось _countTime
. Когда я запускал блок, блок добавлял 10 секунд ко времени, я удалял _countdownClock
, добавлял 10 секунд к _countTime
и, наконец, снова вызывал createTimerWithDuration:position:andSize:
с обновлением _countTime
.
Но это, похоже, не сработало для меня. Я полагал, что это будет работать довольно хорошо. Это действительно добавило ко времени 10 секунд, как я и хотел, но таймер начал уменьшаться на три секунды. Подождал бы секунду, потом 15-14-12 БАМ! Подождите секунду, затем 11-10-9 БАМ! И так далее.
Так что же здесь происходит? Был ли это правильный подход? Есть ли лучший способ увеличить время или (еще лучше!) лучший способ создать таймер с такой функцией?