我一直在玩SpriteKit,并且对于如何从代码中驱动它感觉非常体面,但我对Xcode 6中包含的关卡编辑器感到非常困惑.
我已经观看了wwdc视频("平台状态联盟"和"spriteKit中的新内容"),并在网络上徘徊,但未能找到关于关卡编辑器的更多描述,以及它真正在做什么.
我不明白的是,模板设置的两个文件是如何相关的?.sks文件是GameScene.swift文件的表达式,还是它包含的GameScene类?
或者它们是否只是在同一场景中保持将要一起播放的单独对象/节点?
或者(这是我最好的解释)是.sks文件和编辑器基本上是为了使响应角色能够"生活"的环境?如果这是真的,.swift文件中的代码如何与.sks文件中的代码相关?
ric*_*ter 25
该.sks文件是场景内容的静态存档.如果您之前使用过Interface Builder来设置UI应用程序,那么它的想法就差不多了,如果实现方式不同的话.
在UI应用程序中,您可以在代码中执行所有操作:
override func viewDidLoad() {
let someText = UITextField(...)
let aButton = UIButton(...)
// ... position everything
// ... style everything
// ... etc ...
}
Run Code Online (Sandbox Code Playgroud)
或者你可以在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 ...
}
Run Code Online (Sandbox Code Playgroud)
这是很多代码最终是一个图形化的静态场景 - 甚至在你开始添加代码以使其成为一个游戏之前(输入处理,敌人行为,物理回调增加分数或游戏结束等).并且它不适合于从内容中分离出一般游戏逻辑的设计,因此在游戏中添加多个级别会更加困难.
相反,您可以使用Xcode中的SpriteKit编辑器来构建静态内容(级别),并坚持使用动态行为和游戏逻辑的代码.就像在IB中,视图控制器是故事板和代码之间的桥梁一样,场景类(GameScene.swift在模板中)是编辑器和代码之间的桥梁..sks在运行时加载文件(此代码GameViewController.swift在模板中)时,它将成为您的GameScene类的实例,您在编辑器中设置的任何内容都可以作为场景的子节点访问.
查看WWDC会谈是一个好主意,但是您错过了一个涵盖此内容的会议:请参阅会话608:构建SpriteKit游戏的最佳实践,了解更多关于SpriteKit编辑器背后的动机,如何使用它以及如何使用场景从.sks场景代码中的文件加载的内容.
| 归档时间: |
|
| 查看次数: |
12542 次 |
| 最近记录: |