【问题标题】:Adding a screen before GameScene.swift in SpriteKit在 SpriteKit 中的 GameScene.swift 之前添加一个屏幕
【发布时间】:2015-09-16 00:37:44
【问题描述】:

我正在使用 Swift 在 XCode 中制作游戏,我想在实际游戏之前添加一个起始屏幕。我不想要只是一个淡出的图像,我想要一个带有“播放”、“选择角色”和一些按钮的屏幕。我不知道我是否应该添加一个新的 swift 文件,添加一个 sks 文件,编辑 GameScene.swift 文件?我刚刚开始在 SpriteKit 中开发,如果你能解释我如何正确地做到这一点,那就太好了。谢谢。

【问题讨论】:

    标签: ios xcode swift sprite-kit


    【解决方案1】:

    按照这个一步一步来,它应该可以工作:

    1. 打开您的 Interface Builder (main.storyboard) 并添加 UIViewController。
    2. 选择新的UIViewController,进入Editor > Embed In > UINavigationController
      1. 一个。要删除游戏场景的 UINavBar,您可以使用游戏场景视图控制器中的属性navigationBarHidden
    3. 将您选择的 UIButton 和/或其他控件添加到您的新视图控制器中
    4. 左键单击 (ctrl) 并将 PLAY UIControl 拖动到显示您的游戏场景的视图控制器。
    5. 在添加与其对应的 UIControl 关联的其他视图控制器后连接其他 UIControl。 (见下文)

    如果您只使用 SpriteKit 模板文件进行编程,我建议您查看此Apple Documentation

    ~ 更多详情 ~

    成功添加开始屏幕或根视图控制器后,为每个页面或屏幕添加一个 ViewController,您需要开始屏幕显示,一次拖动一个到 Storyboard 文件中。

    在 main.storyboard 文件中,您需要的所有屏幕都由视图控制器表示,下一步是从“开始屏幕”上的每个 UIButton 到 ViewController 的控制单击显示其目标屏幕。

    【讨论】:

    • 对不起,我不理解 4 和 5。考虑到我不使用这样的视图,我只在代码和 .swift 中工作和 .sks 文件。
    • 如果您只使用过 SpriteKit 而不是 Interface Builder,那么您实现目标的最佳机会就是熟悉底部的链接。
    • 我知道就像我的手掌一样,我已经制作了 3 个应用程序。但是我在这个游戏中工作是根据一个教程来学习的,我不想改变一切。另外,如何将视图“连接”到 .swift 文件?
    • 我很抱歉使用术语 connect 过度简化了 segue,但如果您熟悉这个概念,您应该能够介绍您想要的起始屏幕中的 GameSceneViewController。
    • 您只是添加了一个带有选项的主页,它将显示 GameSceneViewController 以及您需要的其他视图和/或视图控制器。
    【解决方案2】:

    您可以创建新的精灵套件场景和新的 swift 文件, 然后将您的 swift 文件的类放入自定义类检查器中 gamescene.sks,因此它可以像默认的 GameScene 一样工作。

    然后在 viewDidLoad 而不是原来的 GameScene 中初始化你的菜单场景

    if let menu = SKScene(fileNamed: "MainMenu") {
      menu.scaleMode = .aspectFill
      view.presentScene(menu)
    }
    

    您可以像这样(例如)切换到原始场景:

     override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
        if let touch = touches.first {
            let posistion = touch.location(in: self)
            let node = self.atPoint(posistion)
            if node == yourNode {
                if let originalScene = SKScene(fileNamed: "GameScene") {
                    originalScene.scaleMode = .aspectFill
                    view?.presentScene(originalScene)
                }
            }
        }
    }
    

    【讨论】:

    • 它有效,只是不是直接答案,所以我不得不编辑它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2012-12-06
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多