gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 00:58:20 25 4
gpt4 key购买 nike

我开始遵循 Ray Wenderlich 的“Space Invaders”教程,但出现了很大的分歧。我现在有 3 个 SKScenes——我的标题屏幕、我的主游戏屏幕和我的结束关卡/游戏结束屏幕。我添加的标题屏幕和结束游戏场景,它们都有 .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

我试图删除 required 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 函数内部赋值的变量,那么你会这样做:

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

但是你会问我:Mr Knight0fDragon,它告诉我把fileNamed换成coder,我切换的时候不编译。

这是因为 init(fileNamed:) 是一个方便的 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()
}

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com