gpt4 book ai didi

Swift:多个 sprite kit 游戏场景,从 View Controller 加载游戏场景?

转载 作者:搜寻专家 更新时间:2023-11-01 05:39:38 26 4
gpt4 key购买 nike

好的,所以我在 Swift 中有 sprite kit 游戏,并且我在 apple 为您设置的 GameScene.swift 文件中创建了我的游戏,一切都很好。现在我想在同一个项目中创建另一个游戏场景。

当游戏结束时,游戏立即移动到我在 Storyboard中设置的新 UIViewController(名为 GameOverBufferViewController)。但我想让它移动到一个全新的游戏场景。

所以我查看了 GameViewController 如何加载到 GameScene.swift 中(因为游戏场景需要一个 View Controller 以及 SKScene 代码) 并将其复制到我的 UIViewController 的 View Controller 文件中,游戏结束时游戏将移动到该文件。

我更改了对 GameScene 的引用以匹配我的新游戏场景 swift 文件 (GameOverScene1) 和 unarchiveFromFile 函数以避免错误:

import UIKit
import SpriteKit

extension SKNode {
class func unarchiveFromFile2(file : NSString) -> SKNode? {
if let path = NSBundle.mainBundle().pathForResource(file as String, ofType: "sks") {
var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)
var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData!)

archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameOverScene1
archiver.finishDecoding()
return scene
} else {
return nil
}
}
}


class GameOverBufferViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
if let scene = GameOverScene1.unarchiveFromFile2("GameOverScene1") as? GameOverScene1 {
// Configure the view.

let skView = self.view as! SKView

skView.showsFPS = true
skView.showsNodeCount = true
skView.showsPhysics = 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)

}


}

然后在这里设置我的 GameOverScene1.swift 文件:

import SpriteKit

class GameOverScene1: SKScene {

override func didMoveToView(view: SKView) {

//Do stuff in scene
println("it works!")
}
}

游戏运行没有任何错误或崩溃,但 GameOverScene1 没有运行;它只是转到 GameOverBufferViewController。也没有任何内容打印到控制台。

我做错了什么?

编辑********

这就是我的 GameOverBufferViewController 文件现在的样子,我收到一个 SIGABRT 错误,提示 could not cast a UIView as an SKView:

import UIKit
import SpriteKit

class GameOverBufferViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()

// Do any additional setup after loading the view.
// Configure the view.

back()


}
func back() {
view.subviews.map({ $0.removeFromSuperview() })

let theView = view as! SKView //error on this line
let theMainMenu = GameOverScene( size: view.frame.size )
theMainMenu.scaleMode = SKSceneScaleMode.ResizeFill

theView.presentScene( theMainMenu )

}

最佳答案

我只是用这个:

func back() {
let theView = view as! SKView
let theMainMenu = MainMenu( size: view.frame.size )
theMainMenu.scaleMode = SKSceneScaleMode.ResizeFill

theView.presentScene( theMainMenu )
}

MainMenuSKScene 的子类。

编辑:

确保当您的主要 ViewControllerviewDidLoad() 函数运行时,您将 View 声明为 UIView。像这样:

override func viewDidLoad() {
super.viewDidLoad()

let theView = view as! SKView
let theWelcome = Welcome( size: view.bounds.size )
theWelcome.scaleMode = SKSceneScaleMode.ResizeFill

theView.presentScene( theWelcome )
}

关于Swift:多个 sprite kit 游戏场景,从 View Controller 加载游戏场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32159641/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com