此init(coder :)函数有什么问题?

时间:2019-07-02 14:45:47

标签: swift sprite-kit

我不明白。 我正在尝试创建2D游戏,但我遇到了一个非常基本的问题。 这是我的代码:

import SpriteKit

class GameScene: SKScene {

   let box: SKSpriteNode
   let hero: SKSpriteNode

   override init(size: CGSize){
     hero = SKSpriteNode(color: UIColor.red, size: CGSize(width: size.width / 5, height: size.height / 5))
     box = SKSpriteNode(color: UIColor.blue, size: CGSize(width: size.width, height: size.height))

     super.init(size: size)
     self.addChild(box)
     self.addChild(hero)
 }


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



override func didMove(to view: SKView) {
    // Setting up the scene
}


override func update(_ currentTime: TimeInterval) {
    // Called before each frame is rendered
}

Xcode向我指示以下错误:init(coder :)函数的“在super.init调用中未初始化属性'self.box'”。

然后我尝试将其替换为:

required init?(coder a Decoder: NSCoder){
      fatalError("init(coder:) has not been implemented)
}

但是猜猜是什么...当我启动游戏时,它表明我有一个致命错误。 当我删除所有初始化程序时,它告诉我需要初始化程序。 您是否知道该怎么做?

1 个答案:

答案 0 :(得分:2)

鉴于boxhero不是可选的,因此必须在所有初始化程序中对其进行初始化。

您已经为自定义初始化程序完成了此操作,但还需要使用编码器进行初始化,因为可以与自定义初始化程序分开调用该初始化程序。