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")