私は現在Swift 3とSpritKitの新しいSKTileMapNodeを使用してXcode 8で作業しており、2Dのダンジョンクローラータイプのゲームを作成しています。 GKObstacleGraphがタイルマップを操作するのに問題があります。助けてください! タイルマップの障害物レイヤー内のすべてのタイルをループし、各タイルのポリゴンを作成してGKObstacleGraphに格納しようとしました。障害物層の各タイルは壁タイルです。地図はいくつかのタイプのダンジョンクローラーのように見えるので、壁はすべての場所にあります。 私は以下のようなものを持っている:私は、アプリケーションを実行する際には、80000を超えるノード、あまりにも多くの経路探索pathesがあることを示し、しかしGKObstacleGraphをSKTileMapNodeと連携させる
for row in 0..<tileMapNode.numberOfRows {
for column in 0..<tileMapNode.numberOfColumns {
let tile = tileMapNode.tileDefinition(atColumn: column, row: row)
let tileCenter = tileMapName.centerOfTile(atColumn: column, row: row)
//find 4 corners of each tile from its center
let bottomLeft = float2(CGPointMake(tileCenter.x - tile.size.width/2, tileCenter.y - tile.size.height/2))
let bottomRight = float2(CGPointMake((tileCenter.x - tile.size.width/2, tileCenter.y + tile.size.height/2))
let topRight = float2(CGPointMake((tileCenter.x + tile.size.width/2, tileCenter.y + tile.size.height/2))
let topLeft = float2(CGPointMake((tileCenter.x - tile.size.width/2, tileCenter.y + tile.size.height/2))
var vertices = [topLeft , bottomLeft , bottomRight , topRight ]
let obstacle = GKPolygonObstacle(points: &vertices, count: 4)
obstacleGraph.add(obstacle)
}
}
。 ご協力いただければ幸いです。
ありがとうございます。私はobstaclesFromNodePhysicsBodies機能を使用してみましたが、それぞれの壁のタイルには物理的なボディがあり、マップ上に何百もあるため、同じ結果が得られました。私はGKGridGraphについて考えましたが、ゲームのエンティティがマップ上で自由に動くため、グリッドベースのゲームではないため、適切かどうかはわかりません。ゲームがグリッドベースでない場合でも、GKGridGraphを使用して経路探索を行うことはできますか? – Bob
もう1つ。私はGKAgentを使って敵のエンティティを移動させようとしています。 GKGoal(toFollowPath:path、maxPredictionTime:1.0、forward:true)のようなものです。したがってパスには、GKGraphNodesではなくGKGraphNodesが含まれている必要があります。 – Bob
'GKGridGraphNode'は' GKGraphNode'を継承していますので、 'GKGoal'でもそれを使用することができます。 –