ios - SpriteKit 场景

标签 ios swift sprite-kit sprite

我正在尝试弄清楚如何在 SpriteKit 中添加更多场景。如果我在 GameViewController 中使用 SpriteKit 生成的行

if let scene = GameScene.unarchiveFromFile("GameScene") as? GameScene 

这工作正常,但是如果我创建一个也是 SKScene 类型的类并将其添加到 SKView。

let newscene = GameMenu()
skView.presentScene(newscene)

这行不通。它只显示褪色的灰色,只有一小部分节点,但实际上没有显示任何内容。 SpriteKit 使用 unarchiveFromFile 创建场景的方式有问题吗?我什至没有使用 Storyboard或 GameScene.sks。整个游戏都是以编程方式创建的。如果我尝试为菜单创建另一个 ViewController 并使用 presentViewController,则会出现另一个问题。当它尝试运行时,我也会收到一条错误消息,提示“无法将‘UIView’类型的值转换为‘SKView’。”我正在使用类似于 GameViewController 的同一行来转换它。

let skView = self.view as! SKView

这是它不断突破的路线。如果有人对如何解决此问题有任何见解,将不胜感激。

最佳答案

这是我通常制作场景的方式:

  1. 转到文件 -> 新建 -> 文件...
  2. 点击Cocoa类,点击下一步
  3. 随便命名,让它成为SKScene的子类,选择swift
  4. 在新类中,让它看起来像这样:

    import SpriteKit
    
    class GameScene: SKScene {
    
        override init(size: CGSize) {
            super.init(size: size)
    
            //Other init code
        } 
    
        required init?(coder aDecoder: NSCoder) {
            super.init(coder: aDecoder)
        }
    
        //Other functions like override func touchesBegan, update, etc. Whatever you want
    }
    
  5. 如果你想首先显示场景,GameViewController,你可以在 viewDidLoad 中输入:

    let scene = GameScene(size: skView.bounds.size)
    skView.presentScene(scene) 
    

    (skView 应该已经为您制作好了,但如果不是,它:let skView = self.view as!SKView,并将其放在所有 let scene = GameScene 之前。 ..等等和viewDidLoad中的东西。

  6. 然后,如果您想从不同的 SKScene 而非 View Controller 呈现场景,请执行以下操作:

    let scene = GameScene(size: self.frame.size)
    self.view?.presentScene(scene)
    

关于ios - SpriteKit 场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30043006/

相关文章:

ios - Swift: map :如何判断我的路线上的下一条交叉路口

swift - BitTrex 时间格式和时区

ios8 - 为什么 [NSSet containsObject] 在 iOS8 中对 SKNode 成员失败?

ios - 我的应用程序在后台使用了 70Mb,如何释放内存?

Swift Sprite 套件 : Accessing User Data returns nil

ios - ATS 设置 NSAllowsArbitraryLoadsInWebContent 不工作

iphone - 在 UIImageView 中旋转图像

ios - AudioServicesCreateSystemSoundID 和内存地址参数 - 如何传递属性?

iphone - 解析 XML iPhone 时清理 URLS(主要针对空格)

automatic-ref-counting - Swift 中的@autoreleasepool 相当于什么?