从 SpriteKit 中的类播放音频
Posted
技术标签:
【中文标题】从 SpriteKit 中的类播放音频【英文标题】:Playing Audio from a class in SpriteKit 【发布时间】:2014-10-18 15:31:33 【问题描述】:好的,我正在使用 SpriteKit 开发一款游戏,整个应用程序都有背景音乐。最初,我刚刚在每个场景中使用了一个新的AVAudioPlayer
和适当的音频文件,但现在我发现我希望在菜单等之间移动时能够不间断地播放音频。所以我尝试使用一个单独的类来处理所有的背景音乐。我不确定这在技术上是否可行,如果不行,我想看看是否有其他方法可以解决我的问题。
进入代码...这是我的音频类的头文件:
#import <AVFoundation/AVFoundation.h>
typedef NS_ENUM(int, songTitle)
Menu_Music,
Level_1,
Level_2,
Game_Over,
;
@interface NWAudioPlayer : AVAudioPlayer
@property (nonatomic, assign) songTitle songName;
@property (nonatomic) AVAudioPlayer* bgPlayer;
-(void)createAllMusicWithAudio: (songTitle)audio;
@end
这是实现:
#import "NWAudioPlayer.h"
@implementation NWAudioPlayer
-(void)createAllMusicWithAudio: (songTitle)audio
if ([[GameState sharedGameData] audioWillPlay] == YES)
switch (audio)
case Menu_Music:
[self playMusicWithString:@"menuMusic"];
break;
case Level_1:
[self playMusicWithString:@"Level-1-Music"];
break;
case Level_2:
[self playMusicWithString:@"Level-2-Music"];
break;
case Game_Over:
break;
default:
break;
-(void)playMusicWithString: (NSString *)file
NSString *soundFile = [[NSBundle mainBundle] pathForResource:@"menuMusic" ofType:@"m4a"];
NSURL *soundFileUrl = [NSURL fileURLWithPath:soundFile];
NSError *Error = nil;
_bgPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileUrl error:&Error];
_bgPlayer.numberOfLoops = -1;
[_bgPlayer prepareToPlay];
NSLog(soundFile);
@end
然后这是我在场景实现中的内容:
-(void)createAudio
[[NWAudioPlayer alloc] createAllMusicWithAudio:Menu_Music];
[[NWAudioPlayer alloc].bgPlayer play];
显然我会在该场景的 init 中调用 [self createAudio]
。
令人沮丧的部分是我没有收到任何错误,我的 NSLog 显示该方法正在调用正确的音频文件,但没有播放任何内容。显然我错过了一些东西......我很难过。任何帮助表示赞赏!非常感谢!
【问题讨论】:
【参考方案1】:将管理AVAudioPlayer
的代码与场景代码分开。例如,您可以将它放在您的应用程序委托中,或者使用单例实例创建您自己的音乐播放器类。
【讨论】:
好吧,我对使用单例不是很熟悉,所以请原谅我的无知。我会对我的 NSAudioPlayer 类做些什么来使它成为一个单例实例,而不是现在它是什么? 好吧,我想我明白了。无论如何,我有一个基本的单身人士工作。谢谢指点!以上是关于从 SpriteKit 中的类播放音频的主要内容,如果未能解决你的问题,请参考以下文章
如果 spritekit 中正在播放来自另一个应用程序的音乐,如何使 AVAudioPlayer 静音