SpriteKit - didMovetoView未被调用

时间:2016-10-07 07:19:52

标签: ios swift xcode sprite-kit

这是我的视图控制器代码

import UIKit
import SpriteKit
import GameplayKit
class GameViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()

    if let view = self.view as! SKView? {
        // Load the SKScene from 'GameScene.sks'
        if let scene = SKScene(fileNamed: "GameScene") {
            // Set the scale mode to scale to fit the window
            scene.scaleMode = .aspectFill
            // Present the scene
            view.presentScene(scene)
        }

        view.ignoresSiblingOrder = true

        view.showsFPS = true
        view.showsNodeCount = true
    }
}

这是我的GameScene代码

import SpriteKit
import GameplayKit

    class GameScene: SKScene {
       override func didMove(to view: SKView) {
            print("gets called")
        }

但由于某些原因,在调试区域,它没有打印"被调用",这表明didMove甚至没有被调用。这里发生了什么?我错过了什么吗?

5 个答案:

答案 0 :(得分:8)

iOS 9方式

在你的GameViewController中尝试直接呈现你的GameScene而不是通用的SKScene。

if let scene = GameScene(fileNamed: "GameScene") { 
...

记住" fileNamed"不是.swift文件的名称,它是用于xCode级别编辑器的.sks文件的名称。

新的iOS 10方式

似乎Apple现在更愿意像你正在尝试的那样传递通用的SKScene。

  if let scene = SKScene(fileNamed: "GameScene") { ... }

要使其工作,请转到相关的.sks文件并转到右侧的检查器。单击倒数第二个项目(自定义类),然后在自定义类字段中输入.swift文件的名称。

希望这有帮助。

答案 1 :(得分:2)

这可能是因为您没有相关的SKS(在您的情况下为GameScene.sks)文件引用项目,检查您是否已添加或删除/重命名由于错误

答案 2 :(得分:2)

我终于解决了这个问题。

我的项目名称最后包含一段时间。喜欢名字“XXXX。”。经过几次实验,我发现我可以通过删除句点来解决问题。

答案 3 :(得分:0)

我的建议:

使用

override func didMoveToView(view: SKView)

而不是

override func didMove(to view: SKView)

文档/ API中可能存在命名不一致...

答案 4 :(得分:-1)

我认为Tom Xue所说的是一个花了太长时间寻找答案的人。我的应用名称中有一个连字符,这似乎导致了问题。当我重新命名我的项目时,场景呈现应该是它。