Skaction.playsoundfilenamed crashes when repeat - sprite kit

后端 未结 2 1614
天涯浪人
天涯浪人 2020-12-19 06:30

I have a problem with sprite kit SKAction.playSoundFileNamed. In practice, after some time it is played correctly , the app crashes saying it will not load . The file is inc

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

    prelound sound variable

    //init
    var sound = SKAction.playSoundFileNamed("sound.mp3", waitForCompletion: false)
    var sound2 = SKAction.playSoundFileNamed("sound2.mp3", waitForCompletion: false) 
    
    //in the code call function when play sound:
    playSound(sound)
    
    ...
    
    func playSound(soundVariable : SKAction)
    {
        runAction(soundVariable)   
    }
    
    0 讨论(0)
  • 2020-12-19 07:22

    I have this little helper class of type SKNode for playing Audio files. NOTE: Helper object must be added to SKScene hierarchy for audios to be played.

    import UIKit
    
    enum SFX_TYPE:Int
    {
        case NEW_LEVEL = 0
        case BANG = 1
    }
    
    let SFXContainer:[SFX_TYPE:[SKAction]] = [
        SFX_TYPE.NEW_LEVEL : [SKAction.playSoundFileNamed("newlevel.m4a", waitForCompletion: true)],
        SFX_TYPE.BANG : [
            SKAction.playSoundFileNamed("explosion1.m4a", waitForCompletion: true),
            SKAction.playSoundFileNamed("explosion2.m4a", waitForCompletion: true),
            SKAction.playSoundFileNamed("explosion3.m4a", waitForCompletion: true),
            SKAction.playSoundFileNamed("explosion4.m4a", waitForCompletion: true)
        ]
    ]
    
    class SabilandSound: SKNode {
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
        }
    
        deinit
        {
            Helper.masterObserverRemove(self)
        }
    
        override init()
        {
            super.init()
            NSNotificationCenter.defaultCenter().addObserver(self, selector: Selector("masterPlaySFX:"), name: NCNPlaySFX, object: nil)
        }
    
        func masterPlaySFX(n:NSNotification)
        {
            let st = SFX_TYPE(rawValue: n.userInfo![NCNPlaySFX] as! Int)!
            let c = SFXContainer[st]!
            let a = SFXContainer[st]![Helper.randomBetween(0, max: c.count, includeMax: false)]
            runAction(a)
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题