如何在 SpriteKit 场景编辑器中访问导航图的对象

Posted

技术标签:

【中文标题】如何在 SpriteKit 场景编辑器中访问导航图的对象【英文标题】:How to access the object of Navigation graph in SpriteKit scene editor 【发布时间】:2017-06-28 09:44:57 【问题描述】:

我正在使用 SpriteKit 并借助 xcode 中的场景编辑器绘制场景。根据 SpriteKit,我们可以使用导航图绘制路径,我可以使用导航图绘制路径,但我无法在 swift 后端访问此对象。

如何从场景中访问此导航图对象。

【问题讨论】:

@Ron 你知道吗? 这个SO Question 正在讨论同样的问题,并提供了解决方案。 @MarkBrownsword 我有这个问题,那就是如何从我的 soritescene 中获取该图形对象。 【参考方案1】:

在默认 SpriteKit 模板中,GameViewControllerviewDidLoad 函数中有一个部分,用于复制场景编辑器实体和图形。

class GameViewController: UIViewController 
    private var sceneNode: GameScene!

    override func viewDidLoad() 
        super.viewDidLoad()

        // Load 'GameScene.sks' as a GKScene.
        if let scene = GKScene(fileNamed: "GameScene") 

            // Get the SKScene from the loaded GKScene
            if let sceneNode = scene.rootNode as! GameScene? 
                self.sceneNode = sceneNode

                self.sceneNode.entities = scene.entities // <-- entities loaded here
                self.sceneNode.graphs = scene.graphs // <-- graphs loaded here

                // ... other scene loading code
            
        
    

这些 Entities 和 Graphs 数组变量在 GameScene 中声明。然后从数组中检索图形。

class GameScene : SKScene 
    var entities = [GKEntity]()
    var graphs = [String : GKGraph]()
    var navigationGraph: GKGraph<GKGraphNode>!

    override func didMove(to view: SKView) 
       self.navigationGraph = self.graphs.values.first // <-- get a reference to your graph
    

如果 SpriteKit 编辑器中有多个图形,则使用查询按名称检索它。

self.navigationGraph = self.graphs.values.first(where: $0.name == "GraphName")

【讨论】:

很好,很好的答案。我的错误是我尝试使用 SKScene。 嗨,你知道你在 Objective-C 中是如何做到这一点的吗?

以上是关于如何在 SpriteKit 场景编辑器中访问导航图的对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在另一个视图控制器中访问 SpriteKit 场景的变量?

如果使用编辑器中的场景加载,如何在 SpriteKit 中检测触摸

SpriteKit,创建一个位于所有场景之上的导航菜单

使用 SpriteKit 场景编辑器设计复杂对象

子类化使用 SpriteKit .sks 场景文件创建的 SKNode

Xcode,SpriteKit:旋转整个场景,编辑数组内精灵的属性