从 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 中的类播放音频的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的音频会在 Sprite Kit 场景转换之前播放?

如果 spritekit 中正在播放来自另一个应用程序的音乐,如何使 AVAudioPlayer 静音

SpriteKit 覆盖音频文件

我的 Sprite Kit 游戏第一次播放音频变慢?

在 viewDidLoad Swift 3 中循环播放音频音乐的问题

让音频播放器快速工作(xcode 7.1.1)?