我无法在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。
提前致谢。
答案 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)))
}
}