首页 > 解决方案 > 无法将场景编辑器中的 SKSpriteNode 引用到代码中

问题描述

我创建了一个GameScene.sks文件,添加了一个 Color Sprite,并为其命名dino。然后在GameViewController,

override func viewDidLoad() {
    let scene = GameScene(size: view.bounds.size)
    let skView = view as! SKView
    skView.showsFPS = true
    skView.showsNodeCount = true
    skView.ignoresSiblingOrder = true
    scene.scaleMode = .resizeFill
    skView.presentScene(scene)
}

我有GameScene.swift看起来像

class GameScene: SKScene {
    //let player = SKSpriteNode(imageNamed: "dino-left")
    private var dino: SKSpriteNode? = SKSpriteNode()
    private var dinoWalkingFrames: [SKTexture] = []

    override func didMove(to view: SKView) {
        self.backgroundColor = NSColor.white
        if let someDino = self.childNode(withName: "dino") as? SKSpriteNode {
            // ... does not works -->
            dino = someDino
            dino?.physicsBody?.isDynamic = false
            print("Worked")
        } else {
            initDino()  // --> this works
            initBackground()
        }
    }

    func initDino() {
        // manually load image from texture atlas and add using addChild
        // ...
    }
// ...
}

参考self.childNode(withName: "dino") as? SKSpriteNodenil。如何从场景编辑器中引用精灵,而无需使用代码手动初始化和放置它?

标签: swiftmacoscocoasprite-kit

解决方案


首先确保你的GameScene.sks那个恐龙确实是Scene孩子

在此处输入图像描述

SKSpriteNode然后而不是在这一行中创建一个新的

private var dino: SKSpriteNode? = SKSpriteNode()

做了Optional

private var dino: SKSpriteNode?

推荐阅读