我怎样才能得到我的SKNodes在不同的文件从gamescene swift

问题描述:

我找不到任何有关SKYodes在单独的文件从gamescene.swift。我试图在一个新的类Swift文件中写这个,但似乎没有工作。我不得不做一个功能,但我不知道如何在我的gamescene中调用它。我怎样才能得到我的SKNodes在不同的文件从gamescene swift

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 

我试图让这个在另一个迅速文件,并只使用testlabel在我gamescene。

在此先感谢。

+0

你想通过一个单独的文件中的SKNode来实现什么? –

+0

只有清洁文件 – princearthur791

+0

@MarkBrownsword我认为OP在询问如何在Swift中划分'SKNodes',不知道如何:) – ColdSteel

而不是创建一个新文件,你可以考虑在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))) 
    } 
} 
+0

好吧有道理我只是想知道,因为如果你有超过10个节点,它会变得混乱 – princearthur791

+0

然后,你可以创建一个函数来创建标签,这将减少重复如果你需要创建很多标签。 –

+0

我再次更新了示例以显示使用扩展将逻辑移动到单独的文件中。 –