2017-04-23 122 views
0
 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在我打印時顯示它的隨機化,但實際上它只是一遍又一遍播放相同的聲音文件。爲什麼是這樣?SKAction runBlock似乎沒有像預期的那樣工作

無論什麼時候精靈正在移動,我都會玩這個動作,並在他停下來時暫停。當它暫停並取消暫停腳步文件更改時,但如果我持續運行,它會一遍又一遍地播放相同的文件。 runblock不應該連續隨機化嗎?

回答

0

我認爲問題是當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") 
+0

我得到一個異常的SKAction.playSoundFileNamed()這條線。 EXC_BAD_ACCESS。哦,等等,解決這個問題......是因爲我沒有運行聲明它的行爲。 – Brejuro

+0

是的,這仍然沒有工作,雖然我認爲它試圖跑這麼多次,以至於崩潰 – Brejuro

+0

我改變了我的答案與不同的事情嘗試。 – vacawama

相關問題