从 SKAction 播放音乐
Posted
技术标签:
【中文标题】从 SKAction 播放音乐【英文标题】:Playing music from a SKAction 【发布时间】:2015-03-16 22:32:05 【问题描述】:我正在尝试将背景音乐添加到我的游戏中。我有一个开关可以让音乐静音,当你再次点击它时它会播放音乐。 这是播放音乐的代码
var backgroundMusic = SKAction.playSoundFileNamed("Background.wav", waitForCompletion: true)
runAction(SKAction.repeatActionForever(backgroundMusic), withKey: "music")
我知道 waitForCompletion 应该设置为 false 以在您点击开关时停止音乐。但是当我将它设置为 false 时,音乐不会播放,它就像静态声音一样。
self.removeActionForKey("music")
那是我用来停止音乐的代码。我想知道您是否可以将音乐静音直到曲目结束,或者在 SpriteKit 中是否有另一种方法可以永久播放音乐。
【问题讨论】:
您可能误解了 waitForComplete 的作用。如果它是真的,那么在声音文件的末尾,它会通知序列,或者foreverAction,它已经完成,以便它可以再次播放。如果它是假的,那么它会立即告诉永远的 Action 做下一件事情。 【参考方案1】:我建议使用ObjectAL 而不是 Spritekit 作为背景音乐。或者这里有一个我用来做背景音乐的简单方法,借用SKUtils:
-(AVAudioPlayer*)setupSound:(NSString*)file volume:(float)volume
NSError *error;
NSURL *url = [[NSBundle mainBundle] URLForResource:file withExtension:nil];
AVAudioPlayer *s = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
s.numberOfLoops = -1;
s.volume = volume;
[s prepareToPlay];
return s;
那你这样称呼它:
...
AVAudioPlayer *bgplayer = [self setupSound:@"Background.wav" volume:1.0];
...
[bgplayer play];
...
[bgplayer pause];
【讨论】:
你知道如何在 swift 中做到这一点吗?【参考方案2】:waitForCompletion
: 如果true
,则这个action
的持续时间与音频播放的长度相同。如果false
,则认为action
已立即完成。
将waitForCompletion
设置为false
,将创建一个持续时间为0
的操作。因此,永远重复操作将无法正常运行。
您必须等待其播放的持续时间,然后再从头开始播放,以便音乐循环播放。所以将waitForCompletion
设置为true
,
var backgroundMusic = SKAction.playSoundFileNamed("Background.wav", waitForCompletion: true)
https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKAction_Ref/index.html#//apple_ref/occ/clm/SKAction/playSoundFileNamed:waitForCompletion:
您可以使用removeActionForKey
停止音乐。
【讨论】:
在播放过程中是否有办法阻止它 您可以使用removeActionForKey
停止音乐。以上是关于从 SKAction 播放音乐的主要内容,如果未能解决你的问题,请参考以下文章