Swift、SpriteKit:如何保存场景的整个进度

2023-12-01

我用“GameViewController.swift”构建了一个快速游戏

import UIKit
import SpriteKit

class GameViewController: UIViewController {


override func viewDidLoad() {
    super.viewDidLoad()


    if let scene = GameScene(fileNamed:"GameScene") {
        // Configure the view.
        let skView = self.view as! SKView

        /* Set the scale mode to scale to fit the window */


        scene.scaleMode = .AspectFill

        skView.presentScene(scene)
        }
    }
}

我有一个名为“GameScene”的场景(当您打开 swift 并创建一个新的 swift 游戏时,它是默认的游戏文件)

import UIKit
import SpriteKit

class GameScene: SKScene{

var building = SKSpriteNode()

override func didMoveToView(view: SKView) {

    /* Setup your scene here */

}

那里发生了很多事情。 (可以放置建筑物并触发一些动作等等)
但当您离开应用程序时,所有进度都会丢失。
如何保存这个“GameScene”的整个进度并在开始时重新加载它?


您可以将游戏状态存档在应用程序DidEnterBackground(_:)事件。订阅通过NotificationCenter得到通知。

class GameScene : SKScene {
    required init?(coder decoder: NSCoder) {
        super.init(coder: decoder)

        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
    }
}

场景加载发生在viewDidLoad,首先尝试定位以前存档的场景,或者如果不存在存档场景则创建新场景。

class GameViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

        if let view = self.view as! SKView? {
            guard let scene = GameScene.loadScene() ?? SKScene(fileNamed: "GameScene") as? GameScene else {
                fatalError("Scene not loaded")
            }

            scene.scaleMode = .resizeFill

            view.presentScene(scene)            
            view.ignoresSiblingOrder = true
        }
    }
}

您还需要制作游戏元素NSCoding符合要求,正如其他答案中提到的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift、SpriteKit:如何保存场景的整个进度 的相关文章

  • 分发内部业务 IOS 应用程序

    我遇到了 IOS 应用程序分发的一个令人困惑的部分 因此 我需要简单细分一下我的限制 即仅将我的应用程序分发给我的员工 同事或任何被视为 内部 的人 这是表明我不希望该应用程序出现在应用程序商店中的另一种方式 我的情况是我为几家公司开发 他
  • Xcode 存档上传失败并出现错误

    我正在尝试从 xCode 将新版本上传到 iTunesConnect 但每次我都会遇到此问题 问题是什么 我该如何解决这个问题 最近 我开始在上传过程中遇到问题 Xcode 经常卡住 最终会因您看到的第二个错误而失败 受够了一段时间后 我转
  • 我可以/如何用 RC3 替换我的 KVO 东西?

    我正在尝试将一个使用 Facebook 的 KVOController 的 objc 应用程序移植到 Swift 我被鼓励去看看RC3 https github com ReactiveCocoa ReactiveCocoa作为一种替代且更
  • 仅将 UIImage 移动到另一个 UIImage 内部

    I have an UIImage which is shown in an UIImageView I also have another image in an UIImageView which lays above the firs
  • 我可以更改键盘方向吗?

    例如我用这段代码关闭自动旋转 BOOL shouldAutorotateToInterfaceOrientation UIInterfaceOrientation interfaceOrientation return NO BOOL sh
  • 使用 Simulator 时 Xcode 10 中的屏幕截图尺寸错误

    我正在尝试使用 Xcode 10 模拟器为 iTunes 制作屏幕截图 但图像大小错误 我读过Debug gt Optimize Rendering for Window Scale会有帮助 但在 Xcode 中没有这样的选项 有人有这个问
  • 无法在 iOS 企业应用程序中连接到 example.com

    我面临着一个严重的问题 我正在尝试使企业应用程序上线 通过使用 BetaBuilder 我按照以下步骤操作 myApp ipa manifest plist index html 清单 plist
  • 奇怪的 UITableView 插入/删除行动画

    在带有动画 UITableView RowAnimationTop 的 UITableView 中插入 删除 UITableViewCell 时 我看到了奇怪的效果 当要插入的单元格比上面的单元格大得多时 就会发生动画故障 显示模拟器中的故
  • Xcode 无法找到 strip-frameworks.sh 目录

    我最近将 Xcode 更新到版本 7 1 其中包括 Swift 2 1 我安装了 Swift 2 1 没有遇到任何问题 在尝试运行我的项目后 我意识到我需要获取最新版本的 Realm 因为之前的版本不支持 Swift 2 1 我删除了旧框架
  • Firebase Analytics 禁用受众国家/地区跟踪

    我正在开发一个严格不允许位置跟踪的应用程序 我想使用 Firebase Analytic 的其他功能 例如 PageTransitions 和 Crashalitics 但如果我无法禁用受众位置跟踪 我就无法使用其中任何功能 这是我在 An
  • 两者都实现了类。将使用两者之一

    我有一个项目 它具有使用 SocketRocket 的依赖项 通过 CocoaPods 安装 并从 HeapAnalytics 导入了静态库 显然 HeapAnalytics 库已经使用了 SocketRocket 编译时没有出现错误 但在
  • CBPeripheral 名称有时为 null

    我正在开发一个应用程序来与蓝牙 LE 外围设备进行通信 我目前正在测试的外围设备是其中之一these http www ti com tool cc2540dk mini 有趣的是 有时当我发现它时 我会得到它的正确名称 SimpleBLE
  • ViewWillAppear 没有被 UISplitViewController 调用

    背景和目标 我有一个基于 UISplitViewController 的 iPad 应用程序 到目前为止它支持 4 个方向 但现在我想将其锁定为仅横向 我变了shouldAutorotateToInterfaceOrientation左视图
  • 防止UIScrollView的UIPanGestureRecognizer遮挡UIScreenEdgePanGestureRecognizer

    我有一个UIScrollView它填满了我应用程序的一页上的屏幕 但我希望允许用户从屏幕边缘平移以显示其后面的视图 问题是 UIScrollView 窃取了我的触摸UIScreenEdgePanGestureRecognizer在屏幕边缘
  • “同时创建 xib 文件”按钮已禁用

    我在创建时遇到这个问题UIView s子类 创建 例如 UIViewControllers or UITableViewCells没关系 为什么会出现这种情况 I create view using cmd N and Xcode Vers
  • -[EAGLContext renderbufferStorage:fromDrawable:] 第二次失败?

    我正在开发一个 iOS openGL ES 应用程序 我正在做通常的 EAGLView ES2Render 的事情 启动时 使用以下代码成功创建 frambuffer BOOL createFramebuffers EAGLContext
  • iOS - NSNotificationCenter 多个UIKeyboard通知

    我有两个视图控制器 我们称它们为 A 和 B 1 在 A 中 我显示一个包含文本字段的 popOver 2 B中有一个UITextView用于简单的文本编辑 我必须管理 A 和 B 中的键盘才能滚动键盘隐藏的内容 我知道如何重新定位内容 我
  • iOS Storyboards 我应该使用它们吗? [复制]

    这个问题在这里已经有答案了 我是 iOS 开发新手 尚未创建应用程序 但我向我的朋友寻求建议 他在市场上拥有非常高评价的应用程序 他说不要使用故事板 尽管我很想听取他的建议 但它们似乎确实很有帮助 这是否会在将来给我的应用程序带来问题 我有
  • Swift 使用哪种通用排序算法?它在排序数据上表现不佳

    我一直在挑选和探索 Swift 标准库sort 其函数为Array类型 令我惊讶的是 我注意到它在已经排序的数据上表现不佳 对数组进行排序Int打乱顺序似乎比对已经排序的同一个数组进行排序快 5 倍 对已打乱顺序的对象数组进行排序比对已按排
  • GMSMapView 中的倒多边形

    我必须在我的 iPhone 项目中使用 Google 地图 并且我正在使用 GMSPolygon 来绘制多边形 但是如何填充地图上除多边形内部之外的所有位置 就像下图一样 谢谢 我玩过你的问题 主要思想是用多边形填充整个地球 然后为您的特定

随机推荐

  • JSP上传下载视频

    我想设计一个允许管理员下载和上传视频的网站 谁能指导我该怎么做 和上传下载图片一样吗 有网站有例子吗 上传也可以用同样的方法完成 你基本上只需要得到一个InputStream在服务器端 然后您可以写入任何OutputStream你想要 例如
  • Java - 类可以访问其嵌套类的私有字段吗?

    据我了解 私有字段只能在定义它们的类中访问 我有一个基本单链表的代码 public class LinkedList private class Node private String data private Node next priv
  • 使用用户名和密码进行 Flutter Firebase 身份验证

    是否可以使用用户名和密码实施 Firebase 身份验证 不是电子邮件和密码 在 Flutter 中 有没有办法使用 Firebase Auth 插件来做到这一点 从逻辑上讲你可以控制电子邮件地址 我的意思是 如果您愿意 您可以维护电子邮件
  • CSS:将 div 水平设置为 2 行

    可以说我有 div class cont div class single 1 div div class single 2 div div class single 3 div div class single 4 div div cla
  • 在子类的构造函数中使用生成器模式

    我目前正在使用 Builder 模式 严格遵循 Wikipedia 文章中建议的 Java 实现建造者模式 http en wikipedia org wiki Builder pattern 这是一个示例代码 说明了我的实现 public
  • 如何打印 Gremlin 管道/遍历结果

    我在名为的文件中有下面的代码traversal groovy 我从命令行调用gremlin e traversal groovy Begin traversal groovy g TinkerGraphFactory createTinke
  • tkinter - 为什么会有像 bbox 这样的东西?

    现在我更多地使用 tkinter Canvas 我想知道 bbox 的使用 对我来说 我使用 bbox 来获取元素的坐标 但 Canvas 已经有一个方法来返回项目的坐标 那么他们为什么要发明像 bbox 这样的东西呢 对比tcl官方描述h
  • setTimeout不加延迟和立即执行函数一样吗?

    我正在查看网络应用程序中的一些现有代码 我看到了这个 window setTimeout function 这和直接执行函数内容是一样的吗 它不一定会立即运行 也不会显式地将延迟设置为 0 原因是 setTimeout 会从执行队列中删除该
  • MySQL:找出丢失的订单 ID

    我知道这个问题在 StackOverFlow 中被问过好几次 我尝试过其中的一些 但我运气不好 我有一个 MySQL 表 其中有一个字段 orders id 这可能会随机出现在表中 不是按顺序 我需要找出表中缺少哪些 id orders i
  • 用于显示文本模式菜单的库?

    在我正在开发的一个游戏项目中 我的速度严重减慢 甚至到了放弃的地步 因为似乎没有任何库可以简化在文本模式下显示菜单的过程 即 80x25 文本框 command com cmd exe 的本机界面 我需要一些可以提供选择列表的东西 最好包括
  • MVC (5) 根据另一个下拉列表填充[重复]

    这个问题在这里已经有答案了 我知道我可以制作一个包含以下列表的下拉菜单SelectedListItem gt and Html DropDownList someID 和操作系统 我的问题是 如果您有 2 个下拉列表 并且第二个下拉列表取决
  • 如何使用 ROW_NUMBER 对 gridview 和 SQL 自定义查询进行分页

    我有一个执行自定义查询的页面 该查询保存在数据库的某个位置 我需要能够在 gridview 上启用分页 例如 保存在数据库中的查询如下所示 select from requestbases 这将返回 10 000 行 使用下面的方法 我让它
  • mysql从多选中选择最低价格

    表价 user id b01 b02 b03 b04 b05 b06 b07 b08 b09 MP01 21 32 12 34 56 26 21 21 26 MO11 81 332 112 1 12 22 71 17 23 如何从价格 WH
  • 如何在 Spring 批处理中使用决策程序?

    我是 Spring 批次的新手 我创建了一个决策程序 它将 FlowExecutionStatus 返回为 是 否 基于FlowExecutionStatus 我需要打电话step2 or step3 在我下面的代码中 step2 在决胜局
  • WordPress l18n _x() 函数

    我正在尝试理解 WordPress 函数 x 根据 WordPress 网站的解释 在通过上下文消歧时使用 x 示例如下 if false commenttxt commenttxt x Comment noun if false trac
  • 用于求解线性丢番图方程的算法:ax + by = c

    我在这里寻找整数解决方案 我知道它有无数个从第一对解和 gcd a b c 导出的解 然而 我们怎样才能找到第一对解呢 有什么算法可以解决这个问题吗 Thanks Chan 请注意 并不总是有解决方案 事实上 只有一个解决方案 c是的倍数g
  • 关联类型的生命周期绑定被拒绝,尽管它看起来有效

    我有一段无法编译的代码 可以将其简化为以下代码片段 use std error Error use std convert TryFrom A trait that provides methods for parsing data int
  • 在 Bash 函数中使用 getopts

    我想用getopts在我在 bash profile 中定义的函数内 我的想法是我想传递一些标志给这个函数来改变它的行为 这是代码 function t echo getopts a OPTION echo OPTION echo OPTA
  • Tensorflow 2 中 tf.variable 的条件赋值

    对于 numpy 我们有 threshold 3 a np array 1 2 3 4 5 6 a a gt 3 199 a is 1 2 199 199 199 199 如何编写类似的代码tensorflow 2 b tf Variabl
  • Swift、SpriteKit:如何保存场景的整个进度

    我用 GameViewController swift 构建了一个快速游戏 import UIKit import SpriteKit class GameViewController UIViewController override f