簡體   English   中英

從SKAction播放音樂

[英]Playing music from a SKAction

我正在嘗試將背景音樂添加到我的游戲中。 我有一個將音樂靜音的開關,當您再次點擊它時,它將播放音樂。 這是播放音樂的代碼

 var backgroundMusic = SKAction.playSoundFileNamed("Background.wav", waitForCompletion: true)
 runAction(SKAction.repeatActionForever(backgroundMusic), withKey: "music")

我知道應將waitForCompletion設置為false,以在您點擊開關時停止音樂。 但是,當我將其設置為false時,音樂就不會播放,就像靜態聲音一樣。

self.removeActionForKey("music")

那就是我用來停止音樂的代碼。 我想知道您是否可以將音樂靜音直到曲目結束,還是在SpriteKit中有另一種永久播放音樂的方法。

waitForCompletion :如果為true ,則此action的持續時間與音頻播放的長度相同。 如果為false ,則認為該action已立即完成。

waitForCompletion設置為false將會創建一個持續時間為0的動作。 因此,永遠重復動作將無法正常運行。
您必須等待播放的持續時間,然后才能從頭開始再次播放音樂。 因此,將waitForCompletion設置為true

 var backgroundMusic = SKAction.playSoundFileNamed("Background.wav", waitForCompletion: true)

https://developer.apple.com/library/prerelease/ios/documentation/SpriteKit/Reference/SKAction_Ref/index.html#//apple_ref/occ/clm/SKAction/playSoundFileNamed:waitForCompletion

您可以使用removeActionForKey停止音樂。

我建議使用ObjectAL代替Spritekit進行背景音樂。 或者這是我從SKUtils借來的用於背景音樂的簡單方法:

-(AVAudioPlayer*)setupSound:(NSString*)file volume:(float)volume{
    NSError *error;
    NSURL *url = [[NSBundle mainBundle] URLForResource:file withExtension:nil];
    AVAudioPlayer *s = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
    s.numberOfLoops = -1;
    s.volume = volume;
    [s prepareToPlay];
    return s;
}

然后,您將其稱為如下:

...
AVAudioPlayer *bgplayer = [self setupSound:@"Background.wav" volume:1.0];
...
[bgplayer play];
...
[bgplayer pause];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM