2017-04-23 4 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") 

zu funktionieren Wenn diese Aktion ausgeführt wird, zeigt die footstepFile seine Randomisierung, wenn ich es drucken, aber in Wirklichkeit spielt es nur die gleiche Sound-Datei über und über. Warum ist das?SKAction runBlock scheint nicht wie erwartet

Ich spiele diese Aktion, wenn das Sprite sich bewegt, und halte es immer dann an, wenn er aufhört. Wenn es pausiert und pausiert, ändert sich die Fußspurdatei, aber wenn ich ständig renne, spielt es immer und immer wieder. Sollte der Runblock nicht kontinuierlich randomisiert werden?

Antwort

0

Ich glaube, das Problem ist, dass die footstepFile, die aktiv ist, wenn die SKAction.sequence erstellt wird, ist die eine, die wiederholt verwendet wird. Dies liegt daran, dass die Sequenz nur einmal erstellt und dann wiederholt verwendet wird.

Um dies zu lösen, versuchen eine Reihe von playSoundFileNamed Aktionen alle zufälligen Dateinamen und übergeben Sie das zu SKAction.sequence mit der Erstellung:

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

Ich erhalte eine Ausnahme auf dem SKAction.playSoundFileNamed() Linie mit diesem. EXC_BAD_ACCESS. Oh, Moment mal, behoben ... war, weil ich die Aktion nicht gerade ausführen werde. – Brejuro

+0

Ja, das funktioniert immer noch nicht, ich denke es versucht so oft so schnell zu laufen, dass es stürzt – Brejuro

+0

Ich änderte meine Antwort mit einer anderen Sache zu versuchen. – vacawama

Verwandte Themen