2014-11-05 76 views
12

我一直在玩SpriteKit,并且对于如何从代码中驱动它有着相当不错的感觉,但是对于关卡编辑器我感到非常困惑包括在Xcode 6中。SpriteKit模板中的GameScene.swift和GameScene.sks文件之间的关系是什么

我观看过wwdc视频(“平台状态​​联盟”和“spriteKit中有什么新内容”),并在网络上搜索,但一直未能找到关于级别的编辑器,以及它真的在做什么。

我不明白,模板设置的两个文件是如何相关的? .sks文件是GameScene.swift文件的表达式,还是它包含的GameScene类?

或者它们都只是持有将在同一场景中一起玩的单独对象/节点?

或者(这是我最好的解释)是.sks文件和编辑器基本上是为了让响应角色能够“活”的环境?如果这是真的,.swift文件中的代码如何与.sks文件中的内容相关联?

回答

23

.sks文件是场景内容的静态存档。如果您以前使用过Interface Builder来设置UI应用程序,那么它的思路也是一样的,如果在实现上有所不同的话。

在UI的应用程序,你可以在代码中所做的一切:

override func viewDidLoad() { 
    let someText = UITextField(...) 
    let aButton = UIButton(...) 
    // ... position everything 
    // ... style everything 
    // ... etc ... 
} 

或者你可以做IB所有的静态内容设置(一XIB或情节串连图板),并且只用于建立动态使用代码你的应用程序的行为 - 当有人开始触摸这些按钮时发生的事情。当你这样做时,你编写代码的视图控制器作为代理对象存在于xib/storyboard中,在你在IB中设置的内容和代码中设置的内容之间架起一座桥梁。

在SpriteKit中,您有相同的选择。 Xcode的6之前,许多SK游戏把所有的代码方法:

override func didMoveToView(view: SKView) { 
    let player = PlumberSprite(color: .Red) 
    player.position = // ... 
    player.physicsBody = // ... 
    self.addChild(player) 
    let ground = SKSpriteNode(...) 
    ground.position = // ... 
    ground.physicsBody = // ... 
    self.addChild(ground) 
    let block = QuestionBlockSprite() 
    block.position = // ... 
    block.physicsBody = // ... 
    block.contents = CoinSprite() 
    self.addChild(block) 
    // ... etc etc etc ... 
} 

这是一个很大的什么是最终的图形,静态场景码 - 你开始添加代码,使之成为一个游戏,甚至之前(输入处理,敌人的行为,增加分数或去游戏结束的物理回调等)。而且它不适合设计从内容中分离出一般游戏逻辑的地方,因此很难在游戏中添加多个关卡。相反,您可以使用Xcode中的SpriteKit编辑器来构建您的静态内容(级别),并坚持用于动态行为和游戏逻辑的代码。就像在IB中视图控制器是你的故事板和你的代码之间的桥梁一样,你的场景类(模板中的GameScene.swift)是编辑器和代码之间的桥梁。当您在运行时加载.sks文件(代码为模板中的GameViewController.swift)时,它将成为GameScene类的一个实例,您在编辑器中设置的任何内容都可以作为场景的子节点进行访问。

检查WWDC会谈是一个好主意,但是您错过了一个涵盖此内容的主题:请参阅session 608: Best Practices for Building SpriteKit Games以获取更多关于SpriteKit编辑器背后的动机,如何使用它以及如何处理从您场景代码中的.sks文件。

+0

非常好!该视频的前20分钟正是我需要的! – 2014-11-05 23:00:55

+0

我发现.sks文件有一点限制。它有时似乎会丢失我添加的对象,有时它会恢复我所做的更改(模拟与编辑模式)。没有图层视图,我不知道这个.sks文件是多么有用,除非Apple添加更多功能。您必须向前和向后推节点才能处理复杂的层次结构。 – 2015-01-28 17:01:53

相关问题