mog*_*ter 5 sprite-kit sknode skscene swift
我想使用多个.sks文件存储一些复杂的SKNode层次结构,例如游戏菜单。我有一个想要在整个游戏中保持移动的物体的背景,因此呈现不同的SKScenes并不能达到我想要的效果。我被限制在一个场景中,但是我仍然想尽可能地将代码与图稿分开,试图将所有内容压缩到一个.sks文件中很快就会变得拥挤!
因此,我想拥有多个.sks文件,每个文件存储一个不同的菜单:titleMenu,getReadyMenu,pauseMenu,gameOverMenu,每个菜单的所有元素都是一个空SKNode的后代。
我设法加载了文件,将SKNode缓存在本地变量中,并在屏幕上显示了它,但是当我单击菜单上的按钮时,当我单击菜单上的按钮之外时,永远不会调用touchesBegan函数。这是正常的响应者链功能。很困惑。
我确信我的解决方案是如此复杂,以至于仅询问某人是否可以发布一个示例,就可以从.sks文件中仅捕获一个SKNode(和子级),而无需呈现一个新场景,这将更加简单。
因此,有人可以在Swift中发布一个示例吗?
创建新项目时,选择游戏模板。GameViewController.swift 将在文件顶部定义以下扩展实现:
extension SKNode {
class func unarchiveFromFile(file : String) -> SKNode? {
if let path = NSBundle.mainBundle().pathForResource(file, ofType: "sks") {
var sceneData = NSData(contentsOfFile: path, options: .DataReadingMappedIfSafe, error: nil)!
var archiver = NSKeyedUnarchiver(forReadingWithData: sceneData)
archiver.setClass(self.classForKeyedUnarchiver(), forClassName: "SKScene")
let scene = archiver.decodeObjectForKey(NSKeyedArchiveRootObjectKey) as! GameScene
archiver.finishDecoding()
return scene
} else {
return nil
}
}
}
Run Code Online (Sandbox Code Playgroud)
我还没有在 Swift 中这样做过,但我对使用 Objective-C 的这些东西有相当的经验,而且它工作得很好。
| 归档时间: |
|
| 查看次数: |
1033 次 |
| 最近记录: |