3

我对如何在我的 Sprite Kit 游戏中管理背景音乐以实现淡入/淡出很感兴趣。

我注意到 Sprite Kit 有一个内置的声音播放器,但它似乎对非常短的效果更有用,比如“命中”声音:

[self runAction:[SKAction playSoundFileNamed:@"music.mp3" waitForCompletion:NO]];

似乎没有办法阻止这种声音。

我正在使用 Kobold Kit,它带有可以播放声音的 OALSimpleAudio 库:

    [[OALSimpleAudio sharedInstance] preloadEffect:@"die.wav"];
    [[OALSimpleAudio sharedInstance] playEffect:@"die.wav"];

    [[OALSimpleAudio sharedInstance]preloadBg:@"battle.mp3"];
    [[OALSimpleAudio sharedInstance] playBg:@"battle.mp3" loop:YES];

中有一个 bgVolume属性OALSimpleAudio,但没有真正的衰落。

应该尝试编写我自己的淡入/淡出代码,如果有什么东西可以用来控制通用音乐播放器的音量,比如 OALSimpleAudio

4

2 回答 2

4

您也可以只使用AVAudioPlayer中的构建,当然也可以使该功能适应您的播放器:

//play background sound
NSError *error;
NSURL * backgroundMusicURL = [[NSBundle mainBundle] URLForResource:@"SpaceLife" withExtension:@"mp3"];
self.backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error];
self.backgroundMusicPlayer.numberOfLoops = -1;
[self.backgroundMusicPlayer prepareToPlay];
[self.backgroundMusicPlayer play];

然后从这篇文章中添加函数:

- (void)doVolumeFade
{  
    if (self.backgroundMusicPlayer.volume > 0.1) {
        self.backgroundMusicPlayer.volume = self.player.volume - 0.1;
        [self performSelector:@selector(doVolumeFade) withObject:nil afterDelay:0.1];       
     } else {
        // Stop and get the sound ready for playing again
        [self.backgroundMusicPlayer stop];
        self.backgroundMusicPlayer.currentTime = 0;
        [self.backgroundMusicPlayer prepareToPlay];
        self.backgroundMusicPlayer.volume = 1.0;
    }
}
于 2014-02-04T17:23:11.747 回答
3

ObjectAL 内置了一个用于音乐播放的 AVAudioPlayer 包装器。它被称为OALAudioTrack

OALAudioTrack 有一个方法fadeTo:duration:target:selector:可以用来做淡入淡出。您已经有一个可用的 OALAudioTrack 实例作为简单音频接口的backgroundTrack属性:

[[OALSimpleAudio sharedInstance].backgroundTrack fadeTo:.. duration:.. ..];
于 2014-01-02T21:27:21.637 回答