2016-05-23 77 views
0

使用Xcode时,我遇到了令人讨厌的问题,即单击.SKS文件时Xcode总是崩溃。我在这里提出了问题,甚至在Apple开发者论坛上也提到了问题,并且在互联网上搜索了解决方案......但是这是无望的。如何为我的新.sks文件创建.swift文件?

因为我制作的游戏中有很多场景,所以如果我不能使用SpriteKit编辑器以简单的方式与场景交互,我想知道如何通过编码他们的.swift文件来与我的场景进行交互。

所以问题是,例如,当我创建一个文件“EndScene.sks”时,如何创建一个“EndScene.swift”,它与我的.sks文件链接?

非常感谢!

回答

4

创建一个新的swift文件并将其命名为与.sks文件相同。假设您有一个名为MainMenu.sks的.sks文件。您会创建一个名为MainMenu.swift的快速文件。在该文件中,您需要创建一个继承自SKScene的Main Menu类。

import SpriteKit 

class MainMenu: SKScene { 

} 

里面有你会把你的所有代码。正如你所说的,关键是将它链接到.sks文件。

当你去演示你的场景时,你将实例化这个类并将它与.sks文件关联起来。

import UIKit 
import SpriteKit 

class GameViewController: UIViewController { 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     if let scene = MainMenu(fileNamed:"MainMenu") { 
      let skView = self.view as! SKView 
      // Some settings applied to the scene and view 
      // ... code ... 

      skView.presentScene(scene) 
     } 
    } 
//... other code 
} 

注行let scene = MainMenu(fileNamed:"MainMenu")。那就是你实例化你在MainMenu.swift.中创建的类的地方所以,在技术上,MainMenu().swift文件,而fileNamed: "MainMenu".sks文件。您可以在技术上将任何.sks文件放入init调用中,并且它将渲染该场景。

想象一下,拥有一个迷宫亚军的所有逻辑的游戏。您可以在一个名为MazeScene的类中构建所有游戏逻辑,并制作一组.sks文件,每个文件都有不同的迷宫。那么你可以这样,MazeScene(fileNamed: "MazeOne")MazeScene(fileNamed: "MazeThree")

有关此文档,SKScene从SKNode继承,所以你会发现init(fileNamed:) here

这应该让你去的文档。

+0

旁注:我在使用场景编辑器时也遇到很多崩溃。这对于一些温和的设计工作很好,但我发现自己在代码中完成所有更详细的工作。 –

+0

为什么它“重写func viewDidLoad()”不是“重写func didMoveToView(view:SKView)”? –

+0

这是根视图控制器。每个SpriteKit游戏至少有一个。如果你在一个'SKScene'实例中做这个,你可以做一些类似'self.view!.presentScene(scene,transition:transition)'的地方,其中'scene'是'let scene = MainMenu(fileNamed:“MainMenu”) ' –

1

因此,而不是评论我不得不漫步,因为StackOverflow不会让我评论,这有多相同在swift 3?而当你在UIViewController中这样做,你说

if let scene = MainMenu(fileNamed:"MainMenu") { 
     let skView = self.view as! SKView 
     // Some settings applied to the scene and view 
     // ... code ... 

     skView.presentScene(scene) 
    } 

你是什么意思

// ... code ... 

难道我们把所有我们会放在SKScene类在那里,而不是代码是什么意思?我认为整个问题是有一个单独的SKScene类。当我尝试这样的SKScene类我没有加载。谢谢任何澄清和抱歉,我必须回答,而不是评论。这是非常愚蠢的,你需要50声望留下评论我没有看到任何点。不管怎样,谢谢!