2017-04-23 1 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이 예상대로 작동하지 않는 것 같습니다.

스프 라이트가 움직일 때마다이 동작을 실행하고, 멈출 때마다이 동작을 실행합니다. 일시 중지하고 일시 중지 해제하면 footstepFile이 변경되지만 계속 실행중인 경우 동일한 파일을 반복해서 재생합니다. runblock 그것을 지속적으로 무작위로해서는 안된다?

답변

0

SKAction.sequence이 생성 될 때 활성화되는 footstepFile이 반복적으로 사용되는 것이 문제라고 생각합니다. 이는 시퀀스가 ​​한 번만 만들어지고 반복적으로 사용되기 때문입니다.

것은이 문제를 해결하려면 모든 임의의 파일 이름을 사용 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

관련 문제