2017-01-17 78 views
1

我有一堆行爲,我一起排序,然後運行X次的次數。首先,我等待0.05秒,然後播放聲音文件,然後在屏幕上添加一個節點,並隨後將聲音文件隨機播放。但是,當我運行它時,播放的聲音對於每次迭代都是相同的文件。如果迭代部分和向屏幕添加節點,那麼聲音每次都不會隨機化?SKAction似乎沒有像我期望的那樣行爲

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

是迭代器變量中的問題? – bearacuda13

+0

當您創建一個動作時,您只能重新使用它。你不能以你想要的方式修改它。 – Whirlwind

+0

@ bearacuda13沒有迭代變量工作正常,似乎問題是我重新初始化聲音變量 – Brejuro

回答

1

我是不是下面正是你的代碼,這也是雨燕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版本並嘗試使用,因此,當您弄清楚它如何工作時,您將能夠輕鬆地將其應用於您的需求。

相關問題