当我从 GameScene 切换到新场景时,出现灰屏并且我的代码无法运行

Posted

技术标签:

【中文标题】当我从 GameScene 切换到新场景时,出现灰屏并且我的代码无法运行【英文标题】:When I switch from GameScene to a new scene I get a gray screen and my code doesn't run 【发布时间】:2015-08-21 18:09:58 【问题描述】:

由于某种原因,当我尝试从 GameScene 切换到第二个场景时,屏幕变为灰色,但我在第二个场景中编写的代码都没有执行。我认为这个问题可能与 GameViewController 中的内容有关,因为当我将下面的代码从 let scene = GameScene() 切换到 let scene = EndScene 时,EndScene 中的代码运行良好。必须有一个简单的问题,我以某种方式忽略了。如果我需要提供更多信息,请告诉我,我对 spritekit 还很陌生。

我目前有这个代码:

import UIKit
import SpriteKit

class GameViewController: UIViewController 
    override func viewDidLoad() 
        super.viewDidLoad()

        let scene = GameScene()
        let skView = self.view as! SKView
        skView.showsFPS = true
        skView.showsNodeCount = true

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

        /* Set the scale mode to scale to fit the window */
        scene.scaleMode = .ResizeFill
        scene.anchorPoint = CGPointMake(0.5, 0.5)
        scene.size = skView.bounds.size 
        skView.presentScene(scene)
    

    override func shouldAutorotate() -> Bool 
        return true
    

    override func supportedInterfaceOrientations() -> Int 
        if UIDevice.currentDevice().userInterfaceIdiom == .Phone 
            return Int(UIInterfaceOrientationMask.AllButUpsideDown.rawValue)
         else 
            return Int(UIInterfaceOrientationMask.All.rawValue)
        
    

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

    override func prefersStatusBarHidden() -> Bool 
        return true
    

我用来从 GameScene 切换到 EndScene 的代码是:

self.view?.presentScene(SKScene(fileNamed:"EndScene."))

【问题讨论】:

【参考方案1】:

您的 SKScene 构造函数正在寻找一个名为 EndScene 的文件,而它实际上是一个类。尝试在 GameViewController 类中创建一个类似于 viewDidLoad 的函数:

func toEndScene() 
    let skView = self.view as! SKView
    let eScene = EndScene()
    eScene.scaleMode = .ResizeFill
    eScene.anchorPoint = CGPointMake(0.5, 0.5)
    eScene.size = skView.bounds.size 
    skView.presentScene(scene)

考虑到在 viewDidLoad 中为 EndScene 切换 GameScene 对您有用,我认为这是可行的。

【讨论】:

感谢您的快速响应。我用 GameScene 中的新代码替换了旧代码,我的应用立即崩溃了。 请使用此更新后的代码重试。如果它仍然崩溃,你能粘贴在崩溃的开头吗? 我最终只是将我的代码复制并粘贴到一个新项目中,它就可以工作了。我可能不小心从第一个项目中删除了一些代码。感谢您的帮助。

以上是关于当我从 GameScene 切换到新场景时,出现灰屏并且我的代码无法运行的主要内容,如果未能解决你的问题,请参考以下文章

当我从 iPad 切换到 iPhone 在 xcode 上“查看为”时,一个场景仍然看起来像 iPad

返回 GameScene 时内存增加

切换场景时JavaFX选择框空指针异常

为啥当我移动到新场景时蓝牙会断开连接?

Swift:在不同的场景中更新了变量

切换到新笔记本电脑,突然我的 Vue 项目无法编译并出现 ES6 语法错误