Как мне сохранить текущий уровень, на котором находится пользователь. Я попытался использовать следующий код, но он не работает. Когда пользователь покидает игру, я хочу, чтобы игра возобновлялась на том уровне, на котором он остановился.
Это в моем файле viewcontroller.swift:
import UIKit
import SpriteKit
import GameplayKit
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
guard let scene = GameScene.loadScene() ?? SKScene(fileNamed: "mainMenu") as? GameScene else {
fatalError("Scene not loaded")
}
scene.scaleMode = .aspectFill
view.presentScene(scene)
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
override var shouldAutorotate: Bool {
return true
}
override var supportedInterfaceOrientations: UIInterfaceOrientationMask
{
if UIDevice.current.userInterfaceIdiom == .phone {
return .allButUpsideDown
} else {
return .all
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Release any cached data, images, etc that aren't in use.
}
override var prefersStatusBarHidden: Bool {
return true
}
}
У меня есть экран mainMenu, и когда пользователь нажимает на экран, я хочу, чтобы этому человеку был представлен самый последний уровень, на котором был пользователь.
Это в моем файле mainMenu.swift:
import SpriteKit
import GameplayKit
var welcomeLabel = SKLabelNode()
var playLabel = SKLabelNode()
class GameScene: SKScene {
required init?(coder decoder: NSCoder) {
super.init(coder: decoder)
decoder.decodeBool(forKey: "savingKey")
NotificationCenter.default.addObserver(self, selector:
#selector(applicationDidEnterBackground), name:
.UIApplicationDidEnterBackground, object: nil)
}
func applicationDidEnterBackground() {
// Save Scene
let sceneData = NSKeyedArchiver.archivedData(withRootObject: self)
UserDefaults.standard.set(sceneData, forKey: "currentScene")
}
class func loadScene() -> SKScene? {
var scene: GameScene?
if let savedSceneData = UserDefaults.standard.object(forKey:
"currentScene") as? NSData,
let savedScene = NSKeyedUnarchiver.unarchiveObject(with:
savedSceneData as Data) as? GameScene {
scene = savedScene
} else {
scene = nil
}
return scene
}
override func didMove(to view: SKView) {
welcomeLabel = SKLabelNode(fontNamed: "Courier New")
welcomeLabel.text = "Go round Go"
welcomeLabel.fontColor = SKColor.green
welcomeLabel.fontSize = 50
welcomeLabel.position = CGPoint(x: frame.midX, y: 500)
addChild(welcomeLabel)
backgroundColor = UIColor.lightGray
playLabel = SKLabelNode(fontNamed: "Courier New")
playLabel.text = "Tap anywhere to play"
playLabel.fontColor = SKColor.green
playLabel.fontSize = 50
playLabel.position = CGPoint(x: frame.midX, y: frame.midY)
addChild(playLabel)
}
override func touchesBegan(_ touches: Set<UITouch>, with event:
UIEvent?) {
welcomeLabel.isHidden = true
playLabel.isHidden = true
let nextlevel = levelOne(fileNamed: "levelOne")
nextlevel?.scaleMode = .aspectFill
self.view?.presentScene(nextlevel!, transition:
SKTransition.fade(withDuration: 0.1))
}
override func update(_ currentTime: TimeInterval) {
}
}
Я хотел бы, если кто-то может объяснить мне, как это сделать. У меня нет опыта в кодировании и декодировании.