2015-03-05 4 views
-1

Я использовал последовательность действий, и одно из действий звучит для меня.Sprite kit обнаруживает звук завершения

 SKAction *wait = [SKAction waitForDuration:1]; 

     NSString* completion_sound = self.gameData[@"level_data"][@"completion_sound"]; 
     SKAction *playSound = [SKAction playSoundFileNamed:completion_sound waitForCompletion:NO]; 

     SKAction *completion = [SKAction runBlock:^{ 

      // do some code here. 

     }]; 

     SKAction *sequence = [SKAction sequence:@[wait, playSound, completion]]; 

     [self runAction:sequence]; 

Но я хочу обнаружить завершение звука. кажется, что звук все еще воспроизводится во время вызова блока.

ответ

1

Похоже, вы передаете NO для waitForCompletion: аргумента, и он должен быть YES.

Если ДА, продолжительность этого действия совпадает с продолжительностью воспроизведения звука. Если НЕТ, действие считается завершенным немедленно.

Меняют ДА в этой строке коды ...

SKAction *playSound = [SKAction playSoundFileNamed:completion_sound waitForCompletion:YES]; 

... и продолжительность playSound действия будет длиной звука, для этого на «завершение блока» SKAction *completion не будет выполняться до тех пор, пока звук не будет закончен.

1

Ваша последовательность неправильная. Правильный порядок должен быть:

SKAction *sequence = [SKAction sequence:@[playSound, wait, completion]]; 
+0

подождите, пока это еще одно действие. Я хочу начать, я думаю, что Bamsworld asnswer верен, но спасибо за ответ –

Смежные вопросы