从 GameViewController 改变 SKReferenceNode
Alter SKReferenceNode from GameViewController
我正在 Swift 使用 SpriteKit 框架开发游戏。在这个应用程序中,我有 GameScene.sks,其中显示了我的 UI。在该 .sks 文件中,底部菜单有一个 SKReferenceNode。如果用户是 运行 来自 iPhone X 的游戏,底部菜单将改变它的高度。
但是,我很难做到这一点。我将菜单设为 SKReferenceNode 因为它在多个场景中使用 - 所以如果我更改菜单,它将在所有场景中更改(GameScene.sks、GameScene1.sks、GameScene2.sks 等等。 .)
解决这个问题的最佳方法是什么?如果这是一个显而易见的问题,我很抱歉,但我一直对这个问题视而不见。
你做得很好,使用菜单作为 SKReferenceNode 也是我会做的。但是,您无需从 GameViewController 更改它即可获得您想要的结果。
在我需要 RefNode 的外观依赖于某些变量的情况下我做了什么我没有在所需的 init 中加载外观
通常在 RefNode 内部 class 我这样做
class SomeObject: SKSpriteNode {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup() {
//setup objects in here
}
}
但是当我需要更改演示文稿时,我在所需的 init
中注释掉了设置调用
然后从我的 GameScene 中的初始化代码调用设置
class SomeObject: SKSpriteNode {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//setup()
}
func setup(height: CGFloat) {
//setup objects in here
if let background = self.childNode(withName: "//background") as? SKSpriteNode {
self. background = background
background.size.height = height
}
}
}
然后在GameScene
func createSomeObject() {
if let someObjectNode = self.childNode(withName: "//someObjectNode") as? SKReferenceNode {
someObject = someObjectNode(withName: "//someObjectNode") as? SomeObject
//you can figure out this multiple ways
if isIpad {
height = 50
}
else if isIphoneX {
height = 250
}
someObject.setup(height: height)
}
}
我正在 Swift 使用 SpriteKit 框架开发游戏。在这个应用程序中,我有 GameScene.sks,其中显示了我的 UI。在该 .sks 文件中,底部菜单有一个 SKReferenceNode。如果用户是 运行 来自 iPhone X 的游戏,底部菜单将改变它的高度。
但是,我很难做到这一点。我将菜单设为 SKReferenceNode 因为它在多个场景中使用 - 所以如果我更改菜单,它将在所有场景中更改(GameScene.sks、GameScene1.sks、GameScene2.sks 等等。 .)
解决这个问题的最佳方法是什么?如果这是一个显而易见的问题,我很抱歉,但我一直对这个问题视而不见。
你做得很好,使用菜单作为 SKReferenceNode 也是我会做的。但是,您无需从 GameViewController 更改它即可获得您想要的结果。
在我需要 RefNode 的外观依赖于某些变量的情况下我做了什么我没有在所需的 init 中加载外观
通常在 RefNode 内部 class 我这样做
class SomeObject: SKSpriteNode {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup() {
//setup objects in here
}
}
但是当我需要更改演示文稿时,我在所需的 init
中注释掉了设置调用然后从我的 GameScene 中的初始化代码调用设置
class SomeObject: SKSpriteNode {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
//setup()
}
func setup(height: CGFloat) {
//setup objects in here
if let background = self.childNode(withName: "//background") as? SKSpriteNode {
self. background = background
background.size.height = height
}
}
}
然后在GameScene
func createSomeObject() {
if let someObjectNode = self.childNode(withName: "//someObjectNode") as? SKReferenceNode {
someObject = someObjectNode(withName: "//someObjectNode") as? SomeObject
//you can figure out this multiple ways
if isIpad {
height = 50
}
else if isIphoneX {
height = 250
}
someObject.setup(height: height)
}
}