SpriteKit, как каждый раз повторять SKAction после РАЗНОГО случайного количества циклов анимации?

У меня есть SKSpriteNode с анимацией текстур. В основном у меня есть цикл ожидания персонажа из 4 кадров и последовательность анимации моргания. Я хочу зациклить цикл бездействия персонажа навсегда, но заставить его воспроизводить последовательность анимации мигания через случайные промежутки времени.

У меня есть следующий код;

func playIdle() {

    let idle_loop = SKAction.repeatAction(action_textureSequence_idle!, count: randomLoopCount())    

    let sequence = SKAction.sequence([idle_loop, action_textureSequence_blink!])

    let repeatSequence = SKAction.repeatActionForever(sequence)

    runAction(repeatSequence)

}

func randomLoopCount() -> Int {

    return Int(arc4random_uniform(10) + 2)

}

Проблема с вышеизложенным заключается в том, что случайное число генерируется только один раз, поэтому мерцание вообще не происходит случайно. Просто после одинакового количества петель каждый раз. Как добиться желаемого эффекта?


person Geoff H    schedule 02.12.2015    source источник


Ответы (1)


Вы можете использовать рекурсию для достижения того, чего хотите:

func playIdle() {

        let idle_loop = SKAction.repeatAction(action_textureSequence_idle, count: Int(arc4random_uniform(10) + 2))

        let sequence = SKAction.sequence([idle_loop,
                                            action_textureSequence_blink,
                                            SKAction.runBlock({[unowned self] in self.playIdle()})])

        runAction(sequence)

    }

Часть unowned self защищает вас от создания сильный справочный цикл.

person Whirlwind    schedule 02.12.2015
comment
Ты полностью разбил его. Спасибо. - person Geoff H; 03.12.2015