SKAction runBlock не работает должным образом

        let randomize = SKAction.runBlock({ [unowned self] in
            self.footstepFile = "Content/footstep\(RandomInt(1, max: 4))"
            print(self.footstepFile)
        })


        sprite.runAction(SKAction.repeatActionForever(SKAction.sequence([randomize, SKAction.playSoundFileNamed(footstepFile, waitForCompletion: true)])), withKey: "footsteps")

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

Я играю это действие всякий раз, когда спрайт движется, и приостанавливаю его всякий раз, когда он останавливается. Когда он приостанавливает и останавливает изменения footstepFile, но если я постоянно работаю, он просто проигрывает один и тот же снова и снова. Разве блок управления не должен постоянно его рандомизировать?

1 ответ

Я считаю, что проблема в том, что footstepFile который активен, когда SKAction.sequence создан тот, который используется многократно. Это потому, что последовательность создается только один раз, а затем используется повторно.

Чтобы решить эту проблему, попробуйте создать массив playSoundFileNamed все действия с использованием случайных имен файлов и передать это SKAction.sequence:

var actions = [SKAction]()

for _ in 1...16 {
    footstepFile = "Content/footstep\(RandomInt(1, max: 4))"
    actions.append(SKAction.playSoundFileNamed(footstepFile, waitForCompletion: true))
}

sprite.runAction(SKAction.repeatActionForever(SKAction.sequence(actions)), withKey: "footsteps")
Другие вопросы по тегам