调节SKAction的音量playSoundFileNamed:

时间:2013-12-04 09:14:15

标签: ios objective-c swift sprite-kit

有没有办法调节通过SKAction playSoundFileNamed:waitForCompletion:播放的声音音量。

我想实现一个简单的音乐&我的游戏中的音效滑块。我可以通过AVAudioPlayer轻松控制背景音乐,但所有音效都是通过SKAction播放的。

3 个答案:

答案 0 :(得分:10)

以下是我处理此问题的代码

NSError *error;
NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"pew-pew-lei" withExtension:@"caf"];
AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error];
[player setVolume:masterVolume];
[player prepareToPlay];

SKAction*   playAction = [SKAction runBlock:^{
    [player play];
}];
SKAction *waitAction = [SKAction waitForDuration:player.duration+1];
SKAction *sequence = [SKAction sequence:@[playAction, waitAction]];

[self runAction:sequence];

masterVolume变量只是一些预设变量,用户可以从0.0-1.0

更改

waitAction确保播放器在播放整个声音之前不会被删除

希望这有帮助!

答案 1 :(得分:5)

不幸的是,您无法使用SKAction修改音量,因此您也必须使用AVAudioPlayer作为效果。 您可以实现一个自定义的playSoundFileNamed:waitForCompletion:volume:正如您所想的那样使用runBlock,因此您的代码与使用playSoundFileNamed之后的代码不会大不相同:waitForCompletion:。

答案 2 :(得分:3)

夫特:

由于 iOS 9.0 ,如果您已经运行了音频,则可以将音量更改为运行其他操作的节点(请记住,如果您使用{运行某些内容,那么这个操作无法正常工作{1}} 的):

repeatForever

或者您可以创建一个组并使用正确的音量启动音频:

let changeVolumeAction = SKAction.changeVolume(to: 0.3, duration: 0.3)
node.run(changeVolume)