这是我的视图控制器代码
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甚至没有被调用。这里发生了什么?我错过了什么吗?
答案 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所说的是一个花了太长时间寻找答案的人。我的应用名称中有一个连字符,这似乎导致了问题。当我重新命名我的项目时,场景呈现应该是它。