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平台
iOS7 + Sprite Kit:如果我正在改变场景,如何保持一个计时器一直显示?
Sprite Kit 游戏在 tvOS 9.1 和 iOS 9.2 上的 Game Over 中崩溃