2016-11-05 20 views
1

我找不到任何有關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

回答

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))) 
    } 
} 
+0

好吧有道理我只是想知道,因爲如果你有超過10個節點,它會變得混亂 – princearthur791

+0

然後,你可以創建一個函數來創建標籤,這將減少重複如果你需要創建很多標籤。 –

+0

我再次更新了示例以顯示使用擴展將邏輯移動到單獨的文件中。 –