首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从GameViewController更改SKReferenceNode

从GameViewController更改SKReferenceNode
EN

Stack Overflow用户
提问于 2018-01-20 00:34:05
回答 1查看 68关注 0票数 1

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

然而,我在这一点上遇到了一些困难。我将菜单设置为SKReferenceNode,因为它在多个场景中使用-所以如果我更改菜单,它将在所有场景(GameScene.sks、GameScene1.sks、GameScene2.sks等等)中更改。)

实现这一目标的最佳方式是什么?如果这是一个显而易见的问题,我很抱歉,但我在这个问题上一直在自欺欺人。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-20 02:37:44

你做得很好,使用菜单作为SKReferenceNode也是我会做的。但是,您不需要在GameViewController中对其进行更改即可获得您想要的结果。

在需要RefNode的外观依赖于某些变量的情况下,我不会将外观加载到所需的初始化中

通常在RefNode类中,我会这样做

代码语言:javascript
复制
class SomeObject: SKSpriteNode {
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)

        setup()
    }

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

但是,当我需要修改演示文稿时,我会注释掉必需的init中的setup调用

,然后从我的GameScene中的初始化代码调用setup

代码语言:javascript
复制
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中

代码语言:javascript
复制
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)
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48345603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档