【发布时间】: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 显示该方法正在调用正确的音频文件,但没有播放任何内容。显然我错过了一些东西......我很难过。任何帮助表示赞赏!非常感谢!
【问题讨论】:
标签: ios objective-c class sprite-kit avaudioplayer