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

Ara*_*raf 7 ios sprite-kit swift gameplay-kit swift3

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

在此输入图像描述

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

Mar*_*ord 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
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这些实体和图形数组变量在 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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

self.navigationGraph = self.graphs.values.first(where: {$0.name == "GraphName"})
Run Code Online (Sandbox Code Playgroud)

  • 很好很好,很好的答案。我的错误是我尝试使用 SKScene。 (3认同)