【问题标题】:Trouble with SKScenes and Segueing to ViewControllers SpriteKitSKScenes 和 Segueing 到 ViewControllers SpriteKit 的问题
【发布时间】:2016-06-23 02:44:23
【问题描述】:

在我的 GameViewController 中,我有两个场景,一个是 GameScene,另一个是当玩家死亡时切换到的场景 (EndScene)。下面的第一个代码块是我的 EndScene 场景,它应该切换到我的主菜单视图控制器,但由于某种原因它不会。我没有收到任何错误,或者同样,它只是停留在 EndScene 上。第二个代码块是我的 GameViewController.swift 文件。有人可以帮助指出我在这里做错了什么以及我可以做些什么来解决它?

EndScene.swift

import SpriteKit

class EndScene : SKScene {
    var viewController : UIViewController?
    override func didMoveToView(view: SKView) {
        self.segue()

    }
    func segue() {
        self.viewController?.performSegueWithIdentifier("gameToMain", sender: viewController)
    }
}

GameViewController.swift

import UIKit
import SpriteKit

class GameViewController: UIViewController {


    override func viewDidLoad() {
        super.viewDidLoad()


        if let scene = GameScene(fileNamed:"GameScene") {
            // Configure the view.
            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 = .AspectFill
            scene.viewController = self
            skView.presentScene(scene) 

        }
        if let scene = EndScene(fileNamed: "EndScene"){
            // Configure the view.
            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 = .AspectFill
            scene.viewController = self
            skView.presentScene(scene)
        }
    }

    override func shouldAutorotate() -> Bool {
        return true
    }

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

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

    override func prefersStatusBarHidden() -> Bool {
        return true
    }
}

【问题讨论】:

标签: sprite-kit


【解决方案1】:

试试

let newScene: GameScene = GameScene(size: size)
let transition = SKTransition.fadeWithColor(SKColor.blackColor(), duration: 0.5)
view?.presentScene(newScene, transition: transition)

您可以使用其他过渡,但试试这段代码,看看它是否会切换您的场景

【讨论】:

  • 从场景到场景的过渡一切都很好,只是从 EndScene 到 viewController 的过渡不起作用
  • UIViewController 是您的场景的包装器。您不能离开场景并转到 ViewController。但是,您可以访问 ViewController 及其功能。
  • 在您的游戏中,您应该在场景之间进行转换。同一个 GameViewController 呈现两个场景。所以一个典型的场景可能是......从 MenuScene 开始 -> 过渡到 GameScene。玩游戏。从 GameScene -> 过渡到 EndScene。显示分数。从 EndScene -> 过渡到 MenuScene(如果游戏结束)或从 EndScene -> 过渡到 GameScene(如果再次播放选项)
  • 是的,但我的主菜单不是一个场景,它是一个视图控制器,那么我如何从我的场景中获得它?
  • 为什么你的主菜单会在 ViewController 中?它是用 UIKit 编写的吗?您应该只创建一个名为 MenuScene 的场景文件,然后过渡到它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2016-01-31
  • 2014-06-29
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 2014-12-19
相关资源
最近更新 更多