如何从gamescene swift中获取不同文件中的SKNodes

时间:2016-11-05 22:34:58

标签: swift sprite-kit

我无法在gamescene.swift的单独文件中找到任何有关SKNodes的内容。我尝试在一个新的类swift文件中写这个,但似乎没有用。我必须创建一个函数,但我不知道如何在我的gamecene中调用它。

let testLabel = SKLabelNode(fontNamed: "AppleSDGothicNeo-Medium")
    testLabel.text = "TEST"
    testLabel.position = CGPoint(x: self.frame.midX, y: 300)
    testLabel.fontSize = 90
    testLabel.color = SKColor.blue
    testLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.center

我试图在另一个swift文件中创建它,并且只在我的gamecene中使用testlabel。

提前致谢。

1 个答案:

答案 0 :(得分:3)

您可以考虑在GameScene.swift文件中为标签创建属性,而不是创建新文件。这使您可以通过调用self.testLabel将标签添加到场景中。

class GameScene: SKScene {
    lazy var testLabel: SKLabelNode! = {
        let testLabel = SKLabelNode(fontNamed: "AppleSDGothicNeo-Medium")
        testLabel.text = "TEST"
        testLabel.position = CGPoint(x: self.frame.midX, y: 300)
        testLabel.fontSize = 90
        testLabel.color = SKColor.blue
        testLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.center

        return testLabel
    }()

    override func didMove(to view: SKView) {
        self.addChild(self.testLabel)
    }
}

创建新文件确实没有意义,除非您想要创建具有某些扩展功能的自定义SKLabelNode

另一种方法可能是创建一个从输入参数创建标签的函数。

class GameScene: SKScene {
    func makeTestLabel(text: String, position: CGPoint) -> SKLabelNode {
        let testLabel = SKLabelNode(fontNamed: "AppleSDGothicNeo-Medium")
        testLabel.text = text
        testLabel.position = position
        testLabel.fontSize = 90
        testLabel.color = SKColor.blue
        testLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.center

        return testLabel
    }

    override func didMove(to view: SKView) {
        self.addChild(self.makeTestLabel(text: "Test1", position: CGPoint(x: self.frame.midX, y: 300)))
        self.addChild(self.makeTestLabel(text: "Test2", position: CGPoint(x: self.frame.midX, y: 400)))
    }
}

另一个选项,如果你想在场景之间分享,可以在SKScene上创建一个扩展名并移动makeTestLabel功能。如何使用仍然是一样的。这样可以灵活地在场景之间重用逻辑并回答原始问题!

// SKScene+Extensions.swift
import SpriteKit
extension SKScene {
    func makeTestLabel(text: String, position: CGPoint) -> SKLabelNode {
        let testLabel = SKLabelNode(fontNamed: "AppleSDGothicNeo-Medium")
        testLabel.text = text
        testLabel.position = position
        testLabel.fontSize = 90
        testLabel.color = SKColor.blue
        testLabel.horizontalAlignmentMode = SKLabelHorizontalAlignmentMode.center

        return testLabel
    }
}

// GameScene.swift
class GameScene: SKScene {
    override func didMove(to view: SKView) {
        self.addChild(self.makeTestLabel(text: "Test1", position: CGPoint(x: self.frame.midX, y: 300)))
        self.addChild(self.makeTestLabel(text: "Test2", position: CGPoint(x: self.frame.midX, y: 400)))
    }
}