Audio 首次使用SpriteKit播放声音时的小延迟

Audio 首次使用SpriteKit播放声音时的小延迟,audio,sprite-kit,Audio,Sprite Kit,当我使用[self PlaySoundFileName]播放声音时,第一次播放声音时会有一个小延迟,整个应用程序会冻结大约半秒,但之后就可以了。我怎样才能摆脱这个问题呢?在我的游戏设置方法中,我做了类似的事情,似乎效果很好 进行iVar SKAction *_ballsHitSound; 加载场景时设置它 _ballsHitSound = [SKAction playSoundFileNamed:@"ballsCollide.mp3" waitForCompletion:NO]; 然后声音

当我使用[self PlaySoundFileName]播放声音时,第一次播放声音时会有一个小延迟,整个应用程序会冻结大约半秒,但之后就可以了。我怎样才能摆脱这个问题呢?

在我的游戏设置方法中,我做了类似的事情,似乎效果很好

进行iVar

 SKAction *_ballsHitSound;
加载场景时设置它

_ballsHitSound = [SKAction playSoundFileNamed:@"ballsCollide.mp3" waitForCompletion:NO];
然后声音就准备好了

[self runAction:_ballsHitSound];

playSoundFileNamed:action用于播放小声音,如游戏的音效,而不是背景音乐或此类较大的声音文件。如果你打算播放更大的声音文件,你最好使用AVAudioPlayer类,这样你就可以更好地控制声音的再现。 下面是如何使用它的代码片段:

// Load and start background music
    NSError *error;
    NSURL * backgroundMusicURL = [[NSBundle mainBundle] URLForResource:@"background-music" withExtension:@"mp3"];
    self.backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error];
    self.backgroundMusicPlayer.numberOfLoops = -1;
    [self.backgroundMusicPlayer prepareToPlay];
    [self.backgroundMusicPlayer play];

我认为你不必在主线程上播放你的声音,所以我会尝试在背景线程上播放

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
        // Play it here
    });

暂停是声音的初始加载。基本上,在游戏设置中加载这些音频文件就像预加载一样,这绝对是正确的方法。该暂停将在安装过程中存在,但在安装过程中可以管理该暂停。加载SKLabel字体时可能会遇到相同的暂停。因此,最好在设置过程中也使用游戏中使用的字体加载SKLabels。例如,如果你有一个只在游戏中使用的分数弹出窗口的特定字体。