Что вы делаете, когда вы перезагружаете сцену (let menuScene = MenuScene(size: self.size)
), вы сбрасываете все переменные, которые были определены.
Что вы можете сделать, это использовать UserDefaults :
func gameOver(didWin: Bool) {
let menuScene = MenuScene(size: self.size)
menuScene.scaleMode = .aspectFill
let soundToPlay = didWin ? "fear_win.mp3" : "fear_lose.mp3"
UserDefaults.standard.set(soundToPlay, forKey: "soundToPlay")
let transition = SKTransition.flipVertical(withDuration: 1.0)
self.view?.presentScene(menuScene, transition: transition)
}
И:
import SpriteKit
class MenuScene: SKScene {
var soundToPlay: String!
override func sceneDidLoad() {
self.backgroundColor = SKColor(red: 0, green:0, blue:0, alpha: 1)
// Setup label
let label = SKLabelNode(fontNamed: "AvenirNext-Bold")
label.text = "Press anywhere to play again!"
label.fontSize = 55
label.horizontalAlignmentMode = .center
label.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
addChild(label)
// Play sound
if let soundToPlay = UserDefaults.standard.string(forKey: "soundToPlay") {
run(SKAction.playSoundFileNamed(soundToPlay, waitForCompletion: false))
}
}
Затем вставьте это в функцию applicationWillTerminate
вашего AppDelegate:
func applicationWillTerminate(_ application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
UserDefaults.standard.removeObject(forKey: "soundToPlay")
}
Если вы не добавите это в AppDelegate, тогдаsoundToPlay останется после полного закрытия приложения.
Я не знаю, является ли UserDefaults
лучшим способом сделать это, но я боролся с этим, когда делал свое приложение iOS
, и ятолько что сделал это.Так что, если у кого-то есть лучший ответ, пожалуйста, сообщите мне также!