ios - Sprite Kit 停止播放音乐文件并从头开始播放

标签 ios objective-c sprite-kit

每当我展示我的场景时,我都想开始播放音乐文件并停止播放上次展示我的场景时的音乐。我正在尝试这样做。

[self removeActionForKey:@"Music"];
[self runAction:[SKAction repeatActionForever:[SKAction playSoundFileNamed:@"Music.wav" waitForCompletion:YES]] withKey:@"Music"];

我应该使用 AVAudioPlayer 还是 [SKAction playSoundFileNamed:]

另外我想知道有没有一种方法可以在所有场景下一直播放音乐文件而不用从头开始。

最佳答案

要在所有场景中播放背景音乐,我会推荐AVAudioPlayer。您可以在 AppDelegate 的某处编写代码以从所有场景访问。这是使用 AVAudioPlayer

实现此目的的示例代码
//    AVAudioPlayer *bgMusicLoop;

- (void)playBackroundMusic:(NSString *)fileName withExtenstion:(NSString *)fileExtension
{
    NSString *filePath = [[NSBundle mainBundle] pathForResource:fileName ofType:fileExtension];
    NSError *error;
    if(bgMusicLoop)
        [bgMusicLoop stop];
    bgMusicLoop = nil;
    bgMusicLoop = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:filePath] error:&error];
    if (error) {
        NSLog(@"Error in audioPlayer: %@", [error localizedDescription]);
    } else {
        bgMusicLoop.numberOfLoops = -1;
        [bgMusicLoop prepareToPlay];
        [bgMusicLoop play];
    }
}

- (void)stopBackgroundMusic
{
    if(bgMusicLoop)
        [bgMusicLoop stop];
    bgMusicLoop = nil;
}

- (void)pauseBackgroundMusic
{
    if(bgMusicLoop && bgMusicLoop.isPlaying)
        [bgMusicLoop pause];
}

- (void)resumeBackgroundMusic
{
    if(bgMusicLoop && !bgMusicLoop.isPlaying)
        [bgMusicLoop play];
}

关于ios - Sprite Kit 停止播放音乐文件并从头开始播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30568097/

相关文章:

ios - 自定义 UITableView 中的分隔符颜色不会改变

具有多个离线 map 的 iOS 导航应用程序 : which library to use?

ios - 自定义 UIBarButtonItem

objective-c - UILocalNotification 每周六 12 点 :00 am

iphone - Storyboard中具有不同标识符和不同高度的两个 UITableViewCell

ios - 是否可以在 Spritekit 项目中以编程方式更改纹理色调?

iphone - DYLD_INSERT_LIBRARIES 和 iPhone

ios - 这是保持 APNS 设备 token 更新的标准方法吗?

ios - 从节点滑动时的 RemoveAction

ios - 使用导航 Controller 作为开始屏幕 ios