Swiftで遊ぼう! - 890 - GCGraphのパワーを見よう
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- 初心者はここから!-> 50オヤジでもできるiOS開発
- 私の本業、オフィシャルなブログ-> Life-LOG
- Swift 3 対応
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)を動かす(描画)メソッドを加えていきます。
今日はここまで。