2016-12-01 16 views
2

私は現在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) 
    } 
} 

。 ご協力いただければ幸いです。

答えて

0

ここではGKObstacleGraphが適切なグラフであるとは確信していません。 GameplayKit documentationによると:

たとえば、あなたはXcodeでSpriteKitベースシーンエディタでレベルを設計し、プレイヤー(または他のゲームのエンティティ)が通過することができない領域をマークするために物理学のボディを使用し、その後、obstaclesFromNodePhysicsBodiesを使用することができます:通過不可能な領域を示すGKPolygonObstacleオブジェクトを生成するメソッド。

このように機能obstaclesFromNodePhysicsBodiesを使用すると、障害物を抽出してグラフを作成できます。デカルトグリッドを表すSKTilemapNodeするため

let obstacles = SKNode.obstaclesFromNodePhysicsBodies(self.children) 
graph = GKObstacleGraph(obstacles: obstacles, bufferRadius: 0.0) 

GKGridGraph可能性が高い選択肢です。

+0

ありがとうございます。私はobstaclesFromNodePhysicsBodies機能を使用してみましたが、それぞれの壁のタイルには物理的なボディがあり、マップ上に何百もあるため、同じ結果が得られました。私はGKGridGraphについて考えましたが、ゲームのエンティティがマップ上で自由に動くため、グリッドベースのゲームではないため、適切かどうかはわかりません。ゲームがグリッドベースでない場合でも、GKGridGraphを使用して経路探索を行うことはできますか? – Bob

+0

もう1つ。私はGKAgentを使って敵のエンティティを移動させようとしています。 GKGoal(toFollowPath:path、maxPredictionTime:1.0、forward:true)のようなものです。したがってパスには、GKGraphNodesではなくGKGraphNodesが含まれている必要があります。 – Bob

+0

'GKGridGraphNode'は' GKGraphNode'を継承していますので、 'GKGoal'でもそれを使用することができます。 –

関連する問題