在界面生成器中隐藏 SKScene 中的节点

Posted

技术标签:

【中文标题】在界面生成器中隐藏 SKScene 中的节点【英文标题】:Hide node in SKScene in interface builder 【发布时间】:2016-05-27 09:56:59 【问题描述】:

我在界面构建器中完成了几个 SKScene,其中我在屏幕上可见的 SKScene 部分中放置了几个精灵

我希望一些精灵稍后才会出现,所以我开始在 didMoveToView 方法的开头隐藏它们。

override func didMoveToView(view: SKView)

        // Reading of the sprites created in the SKScene in the interface builder
    BackgroundLayer = self.childNodeWithName("BackgroundLayer") as! SKSpriteNode
    LettreB = self.childNodeWithName("B0") as! SKSpriteNode
    LettreB.hidden = true
    LettreR = self.childNodeWithName("R0") as! SKSpriteNode
    LettreR.hidden = true
    LettreI = self.childNodeWithName("I0") as! SKSpriteNode
    LettreI.hidden = true

我遇到的问题是,在运行应用程序时,我非常短暂地看到所有精灵在它们被隐藏之前。

即使我在界面构建器中将 blendfactor 设置为 1(并将 blendmode 设置为 Alpha),精灵 - 然后在界面构建器中不再可见 - 非常短暂地出现然后在运行应用程序时消失

除了将精灵放在可见区域之外并在我需要它们出现时移动它们之外,有没有办法避免这种情况?我应该在调用 didMoveToView 之前将代码放在其他地方吗?

注意:此问题仅在直接从设备运行应用程序时发生,而不是在通过 Xcode 启动应用程序时发生,我猜出于某些性能原因。

【问题讨论】:

【参考方案1】:

通常使用大写的属性名称被认为是一种不好的态度,你应该使用backgroundLayer或lettreB

这种更改可以通过不同的方式进行(在SKScene init 方法期间,或者通过自定义您的SKSpriteNode 并更改他的init),其中之一是在前面的SKSceneUIViewController在哪里创建场景并调用它:

 override func viewDidLoad() 
        super.viewDidLoad()
        print("---")
        print("∙ \(NSStringFromClass(self.dynamicType))")
        print("---")
        let skView = self.view as! SKView
        if let scene = MyScene(fileNamed:"MyScene") 
           var letter = scene.childNodeWithName("LettreB") as! SKSpriteNode //for example
           letter.hidden = true //for example
           skView.presentScene(scene)
        
 

【讨论】:

感谢您指出正确的方向。我会在 SKScene 初始化期间尝试,这似乎是一个不错的方法。

以上是关于在界面生成器中隐藏 SKScene 中的节点的主要内容,如果未能解决你的问题,请参考以下文章

在界面生成器中隐藏视图控制器的标签栏

生成导致丢帧的新节点 [SpriteKit]

动态显示/隐藏使用界面生成器创建的 UIPickerView

在 SKScene 中隐藏和取消隐藏按钮

SQL Server 报表生成器:根据子报表中的值隐藏 Tablix 行

Cocos Creator开发游戏消灭星星——星星生成