无法使应用程序进入主菜单(Swift 4 SpriteKit)

Posted

技术标签:

【中文标题】无法使应用程序进入主菜单(Swift 4 SpriteKit)【英文标题】:Cannot make app go to main menu (Swift 4 SpriteKit) 【发布时间】:2018-06-13 23:00:30 【问题描述】:

我正在尝试在我的游戏加载后立即将用户引导到一个主菜单文件(使用 Swift 4 SpriteKit 制作)。但是,当我尝试将用户重定向到此 .swift 文件(应在用户屏幕上显示标签的位置)时,除了节点和 FPS 计数器之外,屏幕只是空白。

这是我创建的 MainMenuScene.swift 文件中的代码:

import Foundation
import SpriteKit

class MainMenu: SKScene 
    override func didMove(to view: SKView) 
        print("In scene")
        let myLabel = SKLabelNode(fontNamed: "The Bold Font")
        myLabel.fontColor = SKColor.blue
        myLabel.text = "My Label"
        myLabel.fontSize = 50
        myLabel.position = CGPoint(x: 0, y: 0)
        myLabel.zPosition = 1
        self.addChild(myLabel)
    



这是我在 GameViewController.swift 中的代码

import UIKit
import SpriteKit
import GameplayKit

class GameViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        if let view = self.view as! SKView? 
            // Load the SKScene from 'GameScene.sks'
            if let scene = SKScene(fileNamed: "MainMenuScene") 
                // Set the scale mode to scale to fit the window
                scene.scaleMode = .aspectFill

                // Present the scene
                view.presentScene(scene)
            

            view.ignoresSiblingOrder = true

            view.showsFPS = true
            view.showsNodeCount = true
            view.showsPhysics = true
        
    

    override var shouldAutorotate: Bool 
        return true
    

    override var supportedInterfaceOrientations: UIInterfaceOrientationMask 
        if UIDevice.current.userInterfaceIdiom == .phone 
            return .allButUpsideDown
         else 
            return .all
        
    

    override func didReceiveMemoryWarning() 
        super.didReceiveMemoryWarning()
        // Release any cached data, images, etc that aren't in use.
    

    override var prefersStatusBarHidden: Bool 
        return true
    

我改了

if let scene = SKScene(fileNamed: "GameScene")

if let scene = SKScene(fileNamed: "MainMenuScene")

那行代码应该将用户重定向到 MainMenuScene.swift,但是当我运行程序时,屏幕只是空白。 有谁知道我做错了什么? 谢谢!

【问题讨论】:

使用 Interface Builder 仔细查看您的场景文件。 @ElTomato 我的 MainMenuScene 文件? 我看不出有什么问题... 你的类名是 MainMenu 并且调用 fileNamed 为 "MainMenuScene" 这是正确的吗?试试MainMenu(fileNamed: "MainMenuScene") @RonMyschuk 更改了它,但它仍然不起作用?只是一个空白屏幕? 【参考方案1】:

尝试使用下面的代码

    super.viewDidLoad()

还要确保您的菜单类名为“MainMenuScene”,并且您在 MainMenuScene.sks 将场景名称更改为相同

代码:

 if let scene = GKScene(fileNamed: "MainMenuScene") 

        // Get the SKScene from the loaded GKScene
        if let sceneNode = scene.rootNode as! MainMenuScene? 

           scene.scaleMode = .aspectFill

            // Present the scene
            if let view = self.view as! SKView? 


                view.presentScene(sceneNode)

                view.ignoresSiblingOrder = true

                //view.showsFPS = true
                //view.showsNodeCount = true
            
        
    

【讨论】:

以上是关于无法使应用程序进入主菜单(Swift 4 SpriteKit)的主要内容,如果未能解决你的问题,请参考以下文章

使用 spritekit swift 在 swift 中为游戏创建主菜单

Swift - 使用 UITableViewController 创建子菜单

带有可折叠侧边栏菜单 Swift 的 UITapGestureRecognizer

使用 Swift 2 在菜单按钮点击动画视图

swift:如何单选菜单?使它们相互排斥?

Swift:使用 StoryBoards 和 UIViewControllers 在 GameScene 中满足条件后返回主菜单?