这是我的 View Controller 代码
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")
}
但是由于某些原因,在debug区,并没有打印“gets called”,这说明didMove根本就没有被调用过。这里发生了什么事?我错过了什么吗?
最佳答案
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 文件的名称输入到自定义类字段中。
希望这对您有所帮助。
关于ios - SpriteKit - didMovetoView 未被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39911604/