gpt4 book ai didi

swift - 从 GameViewController 改变 SKReferenceNode

转载 作者:行者123 更新时间:2023-11-28 06:05:35 24 4
gpt4 key购买 nike

我正在使用 SpriteKit 框架在 Swift 中开发一款游戏。在此应用程序中,我有 GameScene.sks,其中显示了我的 UI。在该 .sks 文件中,底部菜单有一个 SKReferenceNode。如果用户从 iPhone X 运行游戏,底部菜单将改变它的高度。

但是,我很难做到这一点。我将菜单设为 SKReferenceNode,因为它在多个场景中使用 - 所以如果我更改菜单,它将在所有场景中更改(GameScene.sks、GameScene1.sks、GameScene2.sks 等等)

处理此问题的最佳方法是什么?如果这是一个显而易见的问题,我很抱歉,但我一直对这个问题视而不见。

最佳答案

你做得很好,使用菜单作为 SKReferenceNode 也是我会做的。但是,您无需从 GameViewController 更改它即可获得您想要的结果。

在我需要 RefNode 的外观依赖于某些变量的情况下我做了什么我没有在所需的 init 中加载外观

通常在 RefNode 类中我这样做

class SomeObject: SKSpriteNode {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)

setup()
}

func setup() {
//setup objects in here
}
}

但是当我需要更改演示文稿时,我会在所需的初始化中注释掉设置调用

然后从我的 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 - 从 GameViewController 改变 SKReferenceNode,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48345603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com