SpriteKit场景

时间:2015-05-05 01:53:07

标签: 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

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

2 个答案:

答案 0 :(得分:2)

以下是我通常制作场景的方法:

  1. 转到文件 - >新 - >文件...
  2. 点击Cocoa Class,点击下一步
  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,并将其放在viewDidLoad中的所有let scene = GameScene... etc之前。

  6. 然后,如果您想要从不同的SKScene而不是视图控制器呈现场景,请执行以下操作:

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

答案 1 :(得分:1)

如果您以编程方式构建场景,请不要尝试从文件(可能存储不同场景)中对其进行单元化。请使用其初始化程序:例如GameMenu()GameMenu(size: whateverSize)或您定义的自定义初始值设定项。