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

标签 ios swift sprite-kit init

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

enter image description here

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

来自:

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

至:

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

然而,这给出了:

enter image description here

我尝试删除必需的 init(coder aDecoder: NSCoder) 但 Xcode 提示

required init(coder: must be supplied by subclass of SKScene

但是我的 titleScenegameOverScene 也是 SKScene 的子类,并且它们没有 init(coder:)

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

最佳答案

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

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

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

但是你会问我:Knight0fDragon先生,它告诉我用coder替换fileNamed,当我切换它时它没有编译。

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

现在使用 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()
}

关于ios - 如何将 .sks 文件添加到现有 Swift/Sprite-Kit 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39807702/

相关文章:

ios - 无法在 TableViewController 中显示来自 Firebase 数据库的项目

swift - 如何在 Swift 中提供带有错误类型的本地化描述?

ios - 添加 UIButton 以覆盖在 UITableView 之上

swift - 垂直移动 Swift 背景中的黑线

ios - 在不使用 SKAction followPath 的情况下以增量方式围绕路径移动节点

iphone - UIScrollView 添加 UIImageViews

ios - MapBox 示例抛出错误 - mbtiles

ios - 如何以编程方式在云工具包中标记可查询的记录类型

ios - 如何处理 UITabBarController 子类中的方向变化

ios - Spritekit : how to make game screen view move upwards as node "jumps" along the y axis?