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

史蒂夫·艾夫斯

我开始关注雷·温德利希(Ray Wenderlich)的“太空侵略者”(Space Invaders)教程,但分歧很大。现在,我有3个SKScenes-我的标题屏幕,主游戏屏幕和结束级别/游戏结束屏幕。我添加的标题屏幕和结束游戏场景都具有.sks文件;游戏主屏幕上没有,并且所有元素(SKSpriteNodes等)都以编程方式放置。我的程序流程如下:

在此处输入图片说明

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

从:

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

至:

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

但是,这给出了:

在此处输入图片说明

我试图删除,required init(coder aDecoder: NSCoder)但是Xcode抱怨

必需的init(coder:必须由SKScene的子类提供

但是mytitleScenegameOverScene也是SKScene的子类,它们没有init(coder :)

我真的看不到通过(fileNames :)和它们的.sks文件显示titleScreen和gameOverScene以及尝试对gameScene进行相同操作的区别。

骑士0f龙

之所以得到要求,是因为在初始化发生之前,您的变量不是可选的或未初始化的。

如果您需要在init函数内部分配变量,则可以执行以下操作:

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

但你会问我:Knight0fDragon先生,它告诉我,以取代fileNamedcoder,当我打开它它不编译。

嗯,这是因为它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()
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何将Core Data添加到现有的Xcode 9 Swift 4 iOS 11项目中?

如何将libgdx添加到现有的android studio项目中?

如何将监视模块添加到现有的Android Studio项目中?

如何将打字稿添加到现有的 vue3 项目中?

如何将pom.xml添加到现有的Eclipse项目中?

如何将scalatest依赖项添加到现有的scala / lift项目中?

如何将eslint添加到现有的vue-cli项目中?

如何将现有的Python文件导入/添加到PyCharm项目?

如何将Angular项目添加到现有的.NET Core Web API项目中?

如何将UI工具包(例如Get Shit Done)添加到现有的Rails项目中?

如何将测试添加到现有的Typescript项目中,并使其显示在Test Explorer中?

如何将jsconfig.json添加到现有的vscode项目中而不破坏它

如何将IdentityServer3添加到现有的基于ASP.Net Identity的项目中?

如何将Vue.js添加到现有的ASP .NET Core 2.0 MVC项目中?

如何将SearchView添加到我现有的“联系人”项目中?

如何将Bridge.net添加到我现有的c#项目中?

如何将Firebase Cloud功能样板添加到现有的Firebase Web项目中?

如何将Web API添加到现有的MVC Hottowel项目

如何将现有的Eclipse Java项目添加到git

如何将现有的非git项目添加到bitbucket

如何将.aspx页添加到现有的MVC 4项目?

如何将jQuery Mobile添加到现有的Worklight 6.2项目

如何通过php脚本将项目添加到现有的json文件中

将单元测试项目添加到现有的Qt Creator项目中

使用dev将api添加到现有的rails项目中

将WebAPI添加到现有的MVC项目中-获取404

将Angular添加到现有的ASP.NET Web窗体项目中?

将LibGDX添加到现有的Android Studio项目中

将drupal添加到现有的Angular项目中