有没有办法调节通过SKAction播放的声音音量 playSoundFileNamed:waitForCompletion:。
我想在我的游戏中实现一个简单的音乐和声音效果滑块。我可以通过AVAudioPlayer轻松控制背景音乐,但所有音效都通过SKAction播放。
有没有办法调节通过SKAction播放的声音音量 playSoundFileNamed:waitForCompletion:。
我想在我的游戏中实现一个简单的音乐和声音效果滑块。我可以通过AVAudioPlayer轻松控制背景音乐,但所有音效都通过SKAction播放。
遗憾的是,您无法使用SKAction修改音量,因此您也必须使用AVAudioPlayer作为效果。 您可以实现一个自定义的playSoundFileNamed:waitForCompletion:volume:正如您所想的那样使用runBlock,因此您的代码将与使用playSoundFileNamed:waitForCompletion:相差无几。
这是我如何处理这个问题的代码
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确保播放器在播放整个声音之前不会被删除
希望这可以帮助!
以来 iOS 9.0 如果您已经运行了音频,则可以将音量更改为运行其他操作的节点(请记住,如果你有一些与之相关的东西,那么这个人就不会工作了 repeatForever
):
let changeVolumeAction = SKAction.changeVolume(to: 0.3, duration: 0.3)
node.run(changeVolume)
或者您可以创建一个组并使用正确的音量启动音频:
let effectAudioAction = SKAction.playSoundFileNamed("electricshockLow.mp3", waitForCompletion: false)
let changeVolumeAction = SKAction.changeVolume(to: 0.3, duration: 0.3)
let effectAudioGroup = SKAction.group([effectAudioAction,changeVolumeAction])
node.run(effectAudioGroup)