在SpriteKit中循环背景音乐

时间:2014-03-09 19:48:22

标签: objective-c avfoundation sprite-kit

我正在使用SpriteKit框架完成iOS游戏。我想知道在用户播放时是否有任何方法可以循环播放背景音乐。 SpriteKit包含一个简单的音乐播放器,但它不允许循环播放音乐......所以我想知道如何实现这一目标。谢谢!

5 个答案:

答案 0 :(得分:6)

您可以将AVAudioPlayer用于此目的:

在你的.h:

#import <AVFoundation/AVFoundation.h>

并将以下内容添加到interface

AVAudioPlayer *player;

在.m中,使用audio oath url初始化播放器:

NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle]
                                             pathForResource:@"bg_music"
                                             ofType:@"mp3"]];
player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil];
player.numberOfLoops = -1;

当您需要播放音频时,您可以致电:

[player play];

注意: &#34; numberOfLoops&#34;是声音在到达结尾时返回到开头的次数。

  • 值为零意味着只播放一次声音。
  • 值为1将导致播放声音两次,依此类推......
  • 任何负数都将无限循环直至停止。

保持编码................:)

答案 1 :(得分:5)

我宁愿使用SKAction:

[SKAction repeatForever:[SKAction playSoundFileNamed:@"hello.caf" waitForCompletion:YES]];

或:

[SKAction repeatAction:[SKAction playSoundFileNamed:@"hello.caf" waitForCompletion:YES]
                 count:100];

Apple Developer的更多信息。

答案 2 :(得分:2)

你可以用两种方式做到这一点。

首先:

1)@import AVFoundation; //在AppDelegate文件中导入

2)@property (nonatomic) AVAudioPlayer * backgroundMusicPlayer; //在AppDelegate文件中定义属性

3)在didFinishLaunchingWithOptions下的AppDelegate文件中委托方法写下面的代码

NSError *error;
    NSURL * backgroundMusicURL = [[NSBundle mainBundle] URLForResource:@"bg" withExtension:@"wav"];
    self.backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error];
    self.backgroundMusicPlayer.numberOfLoops = -1;
    [self.backgroundMusicPlayer prepareToPlay];

4)现在你可以在任何类中使用backgroundMusicPlayer属性,如下面的代码

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
[appDelegate.backgroundMusicPlayer play];

第二:

如果您想使用SKAction,请使用以下代码

SKAction *wait = [SKAction waitForDuration:10.0];
        SKAction *performSelector = [SKAction performSelector:@selector(playEffectBgSounds) onTarget:self];
        SKAction *sequence = [SKAction sequence:@[performSelector, wait]];
        SKAction *repeat   = [SKAction repeatActionForever:sequence];
        [self runAction:repeat];

-(void)playEffectBgSounds{

    //Play Sound
    [self runAction:[SKAction playSoundFileNamed:@"chick.mp3" waitForCompletion:NO]];

}

答案 3 :(得分:0)

AVAudioPlayer *myplayer = ...
[myplayer setNumberOfLoops: INFINITY];

答案 4 :(得分:0)

在你的场景类中添加:

方法1:

self.run(SKAction.repeatForever(SKAction.playSoundFileNamed("music.mp3", waitForCompletion: true)))

方法2:

self.addChild(SKAudioNode(fileNamed: "music.mp3"))