iOS 如何在 Sprite Kit 游戏中创建音频淡入/淡出效果?

Posted

技术标签:

【中文标题】iOS 如何在 Sprite Kit 游戏中创建音频淡入/淡出效果?【英文标题】:iOS how to create audio fade in/out effect in a Sprite Kit game? 【发布时间】:2014-01-02 18:05:16 【问题描述】:

我对如何在我的 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];

OALSimpleAudio 中有一个 bgVolume 属性,但没有真正的淡入淡出。

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

【问题讨论】:

你为什么不想使用AVAudioplayer? ***.com/questions/1216581/… 【参考方案1】:

您也可以只使用 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];

然后你从这个post添加函数:

- (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;
    

【讨论】:

这是天才,简单而有效【参考方案2】:

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

OALAudioTrack 有一个方法fadeTo:duration:target:selector:,您可以使用它来进行衰减。您已经拥有一个可用的 OALAudioTrack 实例作为简单音频接口的 backgroundTrack 属性:

[[OALSimpleAudio sharedInstance].backgroundTrack fadeTo:.. duration:.. ..];

【讨论】:

以上是关于iOS 如何在 Sprite Kit 游戏中创建音频淡入/淡出效果?的主要内容,如果未能解决你的问题,请参考以下文章

如何将你的Sprite Kit游戏从iOS移植到Mac OS X平台

iOS 7 Sprite Kit 释放内存

iOS7 + Sprite Kit:如果我正在改变场景,如何保持一个计时器一直显示?

Sprite Kit 游戏在 tvOS 9.1 和 iOS 9.2 上的 Game Over 中崩溃

如何在 iOS Sprite Kit 中裁剪两张图像并拼接成一张?

背景图像大小 Sprite Kit 游戏