【问题标题】:How to hide button in certain scenes in SpriteKit如何在 SpriteKit 中的某些场景中隐藏按钮
【发布时间】:2015-07-08 17:31:02
【问题描述】:

我正在完成一个基于 SpriteKit 的应用程序,并且刚刚在主情节提要中添加了一个按钮,并将其连接到 GameViewController 中的 IBAction 函数。我的游戏中有多个场景,我只希望按钮显示在 Game Over 场景中。现在它在我所有的场景中都出现在屏幕上。我不知道如何在我的所有场景中隐藏这个按钮,除了 Game Over 一个。

GameViewController 中的代码:

 @IBAction func shareToFacebook(){
    var shareToFacebook: SLComposeViewController = SLComposeViewController(forServiceType: SLServiceTypeFacebook)
        shareToFacebook.setInitialText("J....")
        shareToFacebook.addImage(UIImage(named: "AppLogo180.png"))
        let vc: UIViewController = self.view!.window!.rootViewController!
        vc.presentViewController(shareToFacebook, animated: true, completion: nil)
}

这就是我 viewDidLoad 中的所有内容:

override func viewDidLoad() {
    super.viewDidLoad()

    self.setShareButtonHidden(true)

    if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
        // Configure the view.
        let skView = self.view as! SKView
        skView.showsFPS = false
        skView.showsNodeCount = false
        self.canDisplayBannerAds = false

        /* Sprite Kit applies additional optimizations to improve rendering performance */
        skView.ignoresSiblingOrder = true

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .AspectFill

        skView.presentScene(scene)

    }

}

【问题讨论】:

    标签: swift sprite-kit viewcontroller ibaction skscene


    【解决方案1】:
    • 使用您的 shareButton 创建一个IBOutlet
    • 默认隐藏;
    • 从场景中获得视图控制器的“参考”(您可能应该使用委托);
    • 在 gameOverScene 中取消隐藏按钮。

    编辑:

    在你的 GameViewController 中:

    protocol GameViewControllerDelegate : NSObjectProtocol {
        func setShareButtonHidden(hidden : Bool)
    }
    
    class GameViewController: UIViewController, GameViewControllerDelegate {
    
        @IBOutlet var shareButton : UIButton!
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            self.setShareButtonHidden(true)
    
            if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene {
                /* Configure the view */
                let skView = self.view as! SKView
                skView.showsFPS = true
                skView.showsNodeCount = true
                skView.showsPhysics = true
    
                /* Sprite Kit applies additional optimizations to improve rendering performance */
                skView.ignoresSiblingOrder = true
    
                /* Set the scale mode to scale to fit the window */
                scene.size = skView.bounds.size
                scene.scaleMode = .AspectFill
    
                scene.gameVCDelegate = self
    
                /* Present the scene */
                skView.presentScene(scene)
            }
        } 
    
        func setShareButtonHidden(hidden : Bool) {
            self.shareButton.hidden = hidden
        }
    
        @IBAction func shareToFacebook() {
            // yourCode
    
        }
    
        // ...
    
    }
    

    在您的 GameScene 中(或适应 GameOverScene):

    class GameScene: SKScene, SKPhysicsContactDelegate {
    
        var gameVCDelegate : GameViewControllerDelegate?
    
        // ...
    
        override func didMoveToView(view: SKView) {
            // Scene setup
    
            self.gameVCDelegate?.setShareButtonHidden(false)
    
            // ...
        }
    }
    

    【讨论】:

    • 感谢您的回复。这能够隐藏我的按钮,但由于某种原因它仍然隐藏在 GameOverScene 中。
    • 您的 gameScene 和 gameOverScene 是否加载在同一个视图控制器中?没有更多信息很难提供帮助:s
    • 我编辑了我的问题并添加了我的 viewDidLoad。有什么需要补充的吗?
    • 我实际上可以使用 spritenodes 完成此操作,并且不必使用按钮,它现在可以正常工作了。感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-15
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多