我有很多动作,我一起排序,然后运行X次。首先我等待0.05秒,然后我播放一个声音文件,然后我在屏幕上添加一个节点并随后将声音文件随机化。但是,当我运行它时,每次迭代播放的声音都是相同的文件。如果迭代部分和向屏幕添加节点的工作原理,为什么声音不会每次都随机化?
var iterator = 0
var sound = "Content/text\(RandomInt(1, max: 5)).m4a"
let waitAction = SKAction.waitForDuration(0.05)
let addNode = SKAction.runBlock({
text.addChild(letterNodes[iterator])
iterator += 1
sound = "Content/text\(RandomInt(1, max: 5)).m4a"
})
let sequenceAction = SKAction.sequence([waitAction, SKAction.playSoundFileNamed(sound, waitForCompletion: false), addNode])
let repeatAction = SKAction.repeatAction(sequenceAction, count: letterNodes.count)
runAction(repeatAction)
答案 0 :(得分:1)
我没有完全遵循你的代码,它也是Swift 3,但这个例子接下来会这样做:
它将索引0到2的节点添加,因此将添加的第一个节点为白色,然后是紫色和棕色。
每次都会随机发出声音。我想这就是你想要实现的目标。
class GameScene: SKScene {
let letterNodes = [
SKSpriteNode(color: .white, size: CGSize(width: 50, height: 50)),
SKSpriteNode(color: .purple, size: CGSize(width: 50, height: 50)),
SKSpriteNode(color: .brown, size: CGSize(width: 50, height: 50)),
]
var iterator = 0
override func didMove(to view: SKView) {
let wait = SKAction.wait(forDuration: 2.0)
run(SKAction.repeat(SKAction.sequence([wait,SKAction.run(spawn)]), count: letterNodes.count))
}
func spawn(){
let file = "\(GKRandomDistribution.init(lowestValue: 1, highestValue: 5).nextInt()).wav"
let sound = SKAction.playSoundFileNamed(file, waitForCompletion: false)
let addNode = SKAction.run({[unowned self] in
let node = self.letterNodes[self.iterator]
node.position.y = CGFloat(GKRandomDistribution.init(lowestValue: 50, highestValue: 60).nextInt())
self.addChild(node)
self.iterator += 1
})
let sequence = SKAction.sequence([sound,addNode])
self.run(sequence)
}
}
您和我的代码之间的区别在于您创建了一次声音操作,并且您正在重复使用它。我每次都会创造新的声音动作。代码经过测试,正在运行。您可以轻松地将其转换为您的Swift版本并进行尝试,因此当您弄清楚它是如何工作的时,您将能够轻松地将其应用于您的需求。