5

当我使用 [self playSoundFileNamed] 播放声音时,第一次播放声音时会出现一小段延迟,整个应用程序会冻结大约半秒,但之后就没事了。我怎样才能摆脱这个?

4

3 回答 3

17

在我的游戏设置方法中,我做了这样的事情,它似乎运作良好。

拥有 iVar

 SKAction *_ballsHitSound;

加载场景时设置

_ballsHitSound = [SKAction playSoundFileNamed:@"ballsCollide.mp3" waitForCompletion:NO];

然后声音准备好了

[self runAction:_ballsHitSound];
于 2013-11-02T08:04:56.260 回答
0

playSoundFileNamed: 动作用于播放小声音,例如游戏的音效,而不是背景音乐或更大的声音文件。如果您打算播放更大的声音文件,您最好使用 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];
于 2013-11-04T09:20:14.703 回答
0

我认为您不必在主线程上播放声音,所以我会尝试在后台线程上播放它。

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) {
        // Play it here
    });
于 2016-01-08T15:49:37.290 回答