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

7

我正在使用SpriteKit,并通过xcode中的场景编辑器绘制场景。根据SpriteKit,我们可以使用导航图来绘制路径,我能够使用导航图绘制路径,但我无法从Swift后端访问此对象。

enter image description here

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


@Ron 你知道吗? - Araf
这个SO问题讨论了同样的问题,并提供了一个解决方法。 - Mark Brownsword
1
@MarkBrownsword,我明白你的问题了,就是如何从我的源场景中获取那个图形对象。 - Araf
1个回答

4
在默认的SpriteKit模板中,GameViewController中的viewDidLoad函数有一个部分,它会复制场景编辑器中的实体和图形。
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
            }
        }
    }
}

这些实体和图形的数组变量在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"})

3
很好,非常棒的回答。我的错误是我尝试使用SKScene。 - Araf
嗨,你知道如何在Objective-C中实现这个吗? - Vladimir Despotovic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接