読者です 読者をやめる 読者になる 読者になる

Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 890 - GCGraphのパワーを見よう

Pathfindingの力をみていこう。

GameplayKitでコントロールされるゲームボードは、「Graph」の管理下に置かれます。Graphは、位置情報をNodeとして扱います。

そしてNodeの位置情報は「int2」型として保持されます。ゲームに登場するオブジェクトはすべてEntity型で、自分の存在する位置情報は、VisualComponentクラスとして持ちました。動くために移動先の目的地の情報が必要で、MovementComponentに持たせたところが前回のまでの流れです。

このゲームボード(Graph)の真骨頂が、次のメソッドです。

func findPath(from startNode: GKGraphNode, 
                to endNode: GKGraphNode) -> [GKGraphNode]

このメソッドで、道順が導かれるんです。どんな計算式でパスを見つけたか知る必要が無いんです。アルゴリズムは分かりません。知らなくても使えるってのが初心者にいいのかどうか分かりませんが、上級プログラマーになるために、アルゴリズムを知るという作業はしないといけないでしょうね。

私はそこまで深入りしません。若い人は必ず取り組みましょう。

このメソッドを使って、カスタムメソッドを組み立てます。

func pathToDestination() -> [GKGridGraphNode] {
    let current = 
        scene.graph.node(atGridPosition: coordinate)!
    let goal = 
        scene.graph.node(atGridPosition: destination)!
    return scene.graph.findPath(from: current, 
                                  to: goal) as! [GKGridGraphNode]
}

これでルート情報をゲットできます。ルート情報を得たら、これに基づいてオブジェyクト(Entity)を動かす(描画)メソッドを加えていきます。

今日はここまで。