我正在使用SpriteKit框架在Swift中开发一个游戏。在这个应用程序中,我使用GameScene.sks来展示我的UI。在该.sks文件中,有一个用于底部菜单的SKReferenceNode。如果用户从iPhone X运行游戏,则底部菜单将更改其高度。
然而,我在这一点上遇到了一些困难。我将菜单设置为SKReferenceNode,因为它在多个场景中使用-所以如果我更改菜单,它将在所有场景(GameScene.sks、GameScene1.sks、GameScene2.sks等等)中更改。)
实现这一目标的最佳方式是什么?如果这是一个显而易见的问题,我很抱歉,但我在这个问题上一直在自欺欺人。
发布于 2018-01-20 02:37:44
你做得很好,使用菜单作为SKReferenceNode也是我会做的。但是,您不需要在GameViewController中对其进行更改即可获得您想要的结果。
在需要RefNode的外观依赖于某些变量的情况下,我不会将外观加载到所需的初始化中
通常在RefNode类中,我会这样做
class SomeObject: SKSpriteNode {
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
func setup() {
//setup objects in here
}
}但是,当我需要修改演示文稿时,我会注释掉必需的init中的setup调用
,然后从我的GameScene中的初始化代码调用setup
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)
}
}https://stackoverflow.com/questions/48345603
复制相似问题