我已经使用了一系列动作,其中一个动作对我来说很有意义。
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];
但我想检测完声音。在调用块时,似乎声音仍在播放。
答案 0 :(得分:1)
你的顺序错了。正确的顺序应该是:
SKAction *sequence = [SKAction sequence:@[playSound, wait, completion]];
答案 1 :(得分:1)
您似乎正在为waitForCompletion:
参数传递否,它应该是是。
如果是,则此操作的持续时间与音频播放的长度相同。如果否,则认为该行动已立即完成。
所以在这行代码中改为YES ......
SKAction *playSound = [SKAction playSoundFileNamed:completion_sound waitForCompletion:YES];
... playSound
动作持续时间将是声音的长度,因此在完成声音之前不会执行“完成块”SKAction *completion
。