How to stop a audio SKAction?

前端 未结 2 1356
有刺的猬
有刺的猬 2020-12-07 00:48

Goal: I want to present a new scene:

[self.scene.view presentScene:level2 transition:reveal];

and end the current background music in orde

相关标签:
2条回答
  • 2020-12-07 01:28

    Now you can stop playing sound action by assigning key string for it then using removeActionForKey later

    Sorry, this is Swift. But it can be ported to Obj-C.

    let action: SKAction = SKAction.playSoundFileNamed("sounds/boom.wav", waitForCompletion: true)
    self.runAction(action, withKey:"die-sound")
    // later you do:
    self.removeActionForKey("die-sound")
    

    I have tested successful

    0 讨论(0)
  • 2020-12-07 01:42

    You can't stop audio from playing when run from SKAction. You will need another engine to run your background music.
    Try AVAudioPlayer - it is really easy and straightforward to use. Something like this will work:

    First import header and add new property to your scene or view controller:

    #import <AVFoundation/AVFoundation.h>
    
    @interface AudioPlayerViewController : UIViewController {
    
    @property (strong, nonatomic) AVAudioPlayer *audioPlayer;
    
    }
    

    After this in viewDidLoad or in didMoveToView method of scene add following code:

    - (void)viewDidLoad {
        [super viewDidLoad];
    
        NSURL *url = [NSURL fileURLWithPath:[NSString stringWithFormat:@"%@/audiofile.mp3", [[NSBundle mainBundle] resourcePath]]];
    
        NSError *error;
        self.audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
        self.audioPlayer.numberOfLoops = -1;
    
        if (!self.audioPlayer)
            NSLog([error localizedDescription]);                
        else 
            [self.audioPlayer play];
    
    }
    

    Each time you need your music to stop, just call [self.audioPlayer stop];

    When you need new music to play, put a new player into the property initialized with your new music piece.

    Hope this helps.

    0 讨论(0)
提交回复
热议问题