Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios AVAudioPlayer将应用程序保留在加载屏幕中_Ios_Objective C_Sprite Kit_Avaudioplayer - Fatal编程技术网

Ios AVAudioPlayer将应用程序保留在加载屏幕中

Ios AVAudioPlayer将应用程序保留在加载屏幕中,ios,objective-c,sprite-kit,avaudioplayer,Ios,Objective C,Sprite Kit,Avaudioplayer,当我在第一个场景中使用此代码播放音乐时,应用程序会显示加载屏幕,但不会进入主菜单或其他任何内容。有什么建议吗 NSError *error; NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"POL-parallel-fields-short" withExtension:@"mp3"]; AVAudioPlayer *player = [[AVAudioPlayer alloc] initWith

当我在第一个场景中使用此代码播放音乐时,应用程序会显示加载屏幕,但不会进入主菜单或其他任何内容。有什么建议吗

        NSError *error;
    NSURL *soundURL = [[NSBundle mainBundle] URLForResource:@"POL-parallel-fields-short" withExtension:@"mp3"];
    AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:soundURL error:&error];
    [player setVolume:0.1];
    player.numberOfLoops = -1;
    [player prepareToPlay];

    SKAction*   playAction = [SKAction runBlock:^{
        [player play];
        }];
    SKAction *playMusic = [SKAction repeatActionForever:playAction];

    [self runAction:playMusic];

我建议创建MusicHelper实例

//MusicHelper.m

@interface MusicHelper()
@property (nonatomic) AVAudioPlayer * backgroundMusicPlayer;
@end

@implementation MusicHelper

+ (instancetype)sharedInstance {
    static dispatch_once_t pred;
    static MusicHelper * _sharedInstance;
    dispatch_once(&pred, ^{ _sharedInstance = [[self alloc] init]; });
    return _sharedInstance;
}

- (void)playBackgroundMusic:(NSString *)filename {
    NSError *error;
    NSURL * backgroundMusicURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil];
    self.backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error];
    self.backgroundMusicPlayer.numberOfLoops = -1;
    [self.backgroundMusicPlayer prepareToPlay];
    [self.backgroundMusicPlayer play];
}

- (void)pauseBackgroundMusic
{
    [self.backgroundMusicPlayer pause];
}

@end

切换场景时,所有操作将自动停止。你应该再玩一次,我的建议是使用实例方法。@Valar Morghulis在他的另一个问题中对海报进行了评论后,我了解到他所指的加载屏幕是应用程序启动屏幕,而不是他创建的自定义加载屏幕,因此,没有切换屏幕。@Nicholas Whitley,正如我在你的另一篇文章中所评论的那样-我在某个地方读到有人抱怨类似的问题,他发现他意外地创建了一个无限循环,导致应用程序无法执行实际运行应用程序其余部分的代码。根据我在你另一篇文章中的回答所做的修改后,这也会发生吗?
//MusicHelper.h

#import <Foundation/Foundation.h>
@import AVFoundation;

@interface MusicHelper : NSObject

+ (instancetype)sharedInstance;
- (void)playBackgroundMusic:(NSString *)filename;
- (void)pauseBackgroundMusic;

@end
[[MusicHelper sharedInstance] playBackgroundMusic:@"yourMusic.mp3"]; //Play
[[MusicHelper sharedInstance] pauseBackgroundMusic]; //Stop