有没有办法调节通过SKAction playSoundFileNamed:waitForCompletion:播放的声音音量。
我想实现一个简单的音乐&我的游戏中的音效滑块。我可以通过AVAudioPlayer轻松控制背景音乐,但所有音效都是通过SKAction播放的。
答案 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)