我目前在Xcode 8工作,使用Swift 3和SpritKit的新SKTileMapNode来制作2D地下城爬虫类型的游戏。 我无法让GKObstacleGraph使用tilemap。请帮忙! 我试图遍历tilemap的障碍层内的所有tile,并为每个tile创建一个多边形并将其存储在GKObstacleGraph中。障碍层中的每个瓦片是墙砖。地图看起来像某种类型的地下城爬行器,所以墙壁到处都是。 我有类似下面的内容:
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)
}
}
但是,当我运行应用程序时,它显示有超过80000个节点,路径寻找路径太多。 任何帮助将不胜感激。
答案 0 :(得分:0)
我不确定GKObstacleGraph
是图表的正确选择。根据{{3}}:
例如,您可以使用Xcode中的SpriteKit场景编辑器设计一个关卡,并使用物理实体标记玩家(或其他游戏实体)无法通过的区域,然后使用barriersFromNodePhysicsBodies:方法生成标记无法通过的GKPolygonObstacle对象区域。
函数obstaclesFromNodePhysicsBodies
用于提取障碍物并创建图表;
let obstacles = SKNode.obstaclesFromNodePhysicsBodies(self.children)
graph = GKObstacleGraph(obstacles: obstacles, bufferRadius: 0.0)
对于代表笛卡尔网格的SKTilemapNode
,GKGridGraph
似乎是可能的选择。