无法使用unarchiveFromFile在SpriteKit中设置GameScene

时间:2015-06-28 10:43:46

标签: swift sprite-kit xcode7-beta2

我正在使用Xcode 7 beta 2并关注raywenderlich.com的Breakout教程来学习SpriteKit。这是我尝试使用unarchiveFromFile加载GameScene时出现的错误。

  

GameScene.type没有名为unarchiveFromFile的成员。

以下是代码:

func didBeginContact(contact: SKPhysicsContact) {
    // 1. Create local variables for two physics bodies
    var firstBody: SKPhysicsBody
    var secondBody: SKPhysicsBody

    // 2. Assign the two physics bodies so that the one with the lower category is always stored in firstBody
    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
        firstBody = contact.bodyA
        secondBody = contact.bodyB
    } else {
        firstBody = contact.bodyB
        secondBody = contact.bodyA
    }

    // 3. react to the contact between ball and bottom
    if firstBody.categoryBitMask == BallCategory && secondBody.categoryBitMask == BottomCategory {
        //TODO: Replace the log statement with display of Game Over Scene

        if let mainView = view {
            let gameOverScene = GameOverScene.unarchiveFromFile("GameOverScene") as! GameOverScene
            gameOverScene.gameWon = false
            mainView.presentScene(gameOverScene)
        }
    }
}

1 个答案:

答案 0 :(得分:5)

您应该使用{8}以上的init(fileNamed:)初始化程序。例如:

if let gameOverScene = GameOverScene(fileNamed: "GameOverScene") {
    // ...
}

重要的是要注意init(fileNamed:)SKNode上的便利初始化者:

convenience init?(fileNamed filename: String)

因此,要GameOverScene自动继承init(fileNamed:)GameOverScene必须遵守 The Swift Programming Language: Initialisation 中的以下规则(特别是规则2):

  

假设您为在子类中引入的任何新属性提供默认值,则适用以下两个规则:

     

规则1 如果您的子类未定义任何指定的初始值设定项,则为   自动继承其所有超类指定的初始化器。

     

规则2 如果您的子类提供了所有子类的实现   超类指定初始化程序 - 通过按照继承它们   规则1,或通过提供自定义实现作为其一部分   定义 - 然后它自动继承所有的超类   便利初始化者。