如何将 .sks 文件添加到现有 Swift/Sprite-Kit 项目?

2024-02-10

我开始遵循 Ray Wenderlich 的“太空入侵者”教程,但分歧很大。我现在有 3 个 SKScene - 我的标题屏幕、我的主游戏屏幕和我的最终关卡/游戏结束屏幕。我添加了标题屏幕和游戏结束场景,它们都有 .sks 文件;主游戏屏幕没有,所有元素(SKSpriteNodes 等)都是以编程方式放置的。我的程序流程如下:

我现在实际上想通过场景编辑器放置主游戏屏幕的一些事件,因此我为其创建了一个 .sks 文件,并尝试按如下方式更改我的 titleScene.swift:

from:

    let gameScene = GameScene(size:CGSize(width: 1536, height: 2048))

to:

    let gameScene = SKScene(fileNamed: "GameScene.sks") as! GameScene!

然而,这给出了:

我尝试删除required init(coder aDecoder: NSCoder)但 Xcode 抱怨说

必需的 init(编码器:必须由 SKScene 的子类提供

然而我的titleScene and gameOverScene也是 SKScene 的子类,它们没有 init(coder:)

我真的看不出我通过 (fileNames:) 及其 .sks 文件显示我的 titleScreen 和 gameOverScene 的区别,并尝试对我的 gameScene 执行相同的操作。


您获得所需的原因是因为您有不可选的变量或在 init 发生之前未初始化的变量。

如果你有需要在 init 函数内部分配的变量,那么你会这样做:

required init?(coder aDecoder: NSCoder)
{
   super.init(coder: aDecoder)
}

但你会问我:Mr Knight0fDragon,它告诉我要更换fileNamed with coder,当我切换它时它没有编译。

嗯,这是因为init(fileNamed:)是一个便利 init,而不是指定 init。为了能够子类化一个类并获得它所有的便利 init,您需要覆盖它的所有指定 init。

现在有了 SKScene,您就有了 3 个,并且您已经了解了 1 个。

让我们覆盖其他 2 个:

override init() {
    super.init()
}
override init(size: CGSize) {
    super.init(size: size)
}

好吧,现在这只小狗应该可以编译了,我们只需要分配变量即可。

我喜欢做的是为调用 super 后必须在任何版本的初始化中分配的任何变量创建一个设置方法。

不幸的是,我们无法在调用 super 之前对常量执行此操作,因此我们需要在每个方法中设置这些常量。原因是self尚未完全存在。

这最终看起来像这样:

let constant : String
required init?(coder aDecoder: NSCoder)
{
   constant = "hi"
   super.init(coder: aDecoder)
   setup()
} 
override init() {
    constant = "hi"
    super.init()
    setup()
}
override init(size: CGSize) {
    constant = "hi"
    super.init(size: size)
    setup()
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 .sks 文件添加到现有 Swift/Sprite-Kit 项目? 的相关文章

随机推荐

  • x86-64 指令集、AT&T 语法、lea 和括号的混淆

    有人告诉我 lea rax rdx 是无效语法 因为源代码需要放在括号中 即 lea rax rdx 我想我显然误解了 lea 和括号的目的 我以为 lea rax rdx 会将 rax 中存储的内存地址移动到 rdx 但显然这就是 lea
  • 数据框中未定义所选列时出错

    我一直在做一项作业 我必须从 specdata 目录中读取一些 csv 文件 这些文件非常相似 有 332 个标题为 001 csv 332 csv 如果重要的话 它们具有一致的列和标题 我相信我已经很接近了 但我被上面的错误消息绊倒了 错
  • 连接稀疏矩阵特征值

    我在特征中有两个稀疏矩阵 我想将它们垂直连接成一个 例如 代码的目标是 SparseMatrix
  • events.js:183 抛出错误; // 未处理的“错误”事件

    我通过命令创建了一个新的 React 项目npx create react app agent mo项目 它已被创建 但在启动时npm start我收到以下错误 运行以下命令以避免 ENOSPC echo fs inotify max us
  • 减慢 for 循环以使 Canvas 动画化

    我正在尝试使用画布制作一些东西 我可以在其中传递一个数字 该数字等于0 360的某个度数 并且一条线将从其当前位置到我设置的度数进行动画处理 现在我已经将线路转到了我想要的任何程度 我还没有完成我传递程度的功能部分 现在只是在 for 循环
  • 我们如何在 Python 中获得可选的类属性?

    对于字典我们可以使用 get方法 类的属性并提供默认值怎么样 您可以使用hasattr http docs python org 2 library functions html hasattr and getattr http docs
  • 在 C# 中使用 XmlSerializer.Deserialize() 反序列化父级命名空间之外的子节点

    我有一个应用程序 它使用命名空间来帮助反序列化存储在 XML 中的对象 XML 命名空间也是对象所在的 C 命名空间 例如 给定以下 XML 片段
  • Android 布局文件夹组织

    我正在开发一个 Android 应用程序 目前我有大约 8 个布局 xml 文件layout文件夹 随着每个附加布局资源文件的增加 组织此文件夹的需求也在增加 但是 当我在布局文件夹内创建一个文件夹并通过重构操作将资源移动到该文件夹 时 它
  • sqlalchemy 动态惰性关系的条件多重过滤器

    我正在将 sqlalchemy 与以下模型一起使用 class Page db Model id posts db relationship Post lazy dynamic class Post db Model id page id
  • 为什么在 scala 中创建 List 时需要 Nil ? [复制]

    这个问题在这里已经有答案了 我在清单上有一个基本问题 当我尝试使用 cons 运算符创建列表时 出现以下错误 scala gt val someList 1 2
  • 如何在 Windows 上发送自定义 tcp 数据包?

    我想发送一个数据包 我定义了IP地址 端口 数据等 起初我想也许我可以在Windows上使用原始套接字 但在谷歌搜索一段时间后 我发现MS似乎禁用了原始套接字从XP SP2 是真的吗 现在我不知道该怎么办 有人告诉我用winPcap 然后我
  • IntelliJ Idea 调试/运行控制台; System.out.flush 不刷新

    这几天一直困扰着我 因为它曾经有效 我升级了我的intellij 现在它不起作用了 我不想回去 但我需要一个答案 因此 我正在编写一个控制台应用程序 当它运行时 我希望有一个 shell 来显示进度 它在运行时工作正常 但是当我在 Inte
  • 如何检查 Android 手机是否正在充电

    我正在写一个安卓应用程序 我想知道如何在应用程序启动时检查手机是否正在充电 我读过这个如何知道手机是否正在充电 https stackoverflow com questions 6243452 how to know if the pho
  • IntelliJ:禁用单个模块的警告/错误

    我最近迁移到 IntelliJ 需要解决一个特定问题 我有一个包含许多模块的项目 其中一个模块纯粹用于测试 并且包含许多错误 我想在此屏幕截图中抑制 NNGINETest 上的所有警告 错误 检查 有没有办法配置项目来做到这一点 我找到了这
  • 显示 10 秒后重复淡入淡出两张图像

    我正在尝试使用 HTML 和 CSS 在每张图像显示 10 秒后对其进行交叉淡入淡出 我希望这个不断重复 这是我的 HTML div img class bottom src 1 png img class top src 2 png di
  • Chartjs饼图,径向位移(偏移)

    Chartjs 2 是否支持饼图部分的径向位移 偏移 Chart js 本身无法像这样切出一块 但你总是可以定义您自己的图表类型 http www chartjs org docs advanced usage writing new ch
  • UIViewContentModeScaleAspectFit iphone sdk 提供质量差的图像

    希望快一点吗 我正在创建一个自定义 uitableviewcell 并添加了一个图像视图 我有一些尺寸约为 200x200 的 PNG 图像 我想创建一个缩略图以放入表格视图中 但是当我调整图像大小时 会导致图像质量较差 I use UIV
  • React 组件的推断泛型类型

    Typescript 对于推断泛型类型非常有用 例如 如果我编写以下代码 class AwesomeClass
  • Android 键盘打开时防止文档重排/浏览器调整大小

    这是针对 HTML5 Javascript Web 应用程序 而不是本机 Android 应用程序 当 android 软键盘打开时 如何防止浏览器 DOM 调整我的内容大小 响应式 主要是 vw vh 大小等 发生的情况是 一旦打开键盘
  • 如何将 .sks 文件添加到现有 Swift/Sprite-Kit 项目?

    我开始遵循 Ray Wenderlich 的 太空入侵者 教程 但分歧很大 我现在有 3 个 SKScene 我的标题屏幕 我的主游戏屏幕和我的最终关卡 游戏结束屏幕 我添加了标题屏幕和游戏结束场景 它们都有 sks 文件 主游戏屏幕没有