我目前正在使用Xcode8,使用Swift 3和SpritKit的新SKTileMapNode来制作2D地下城爬行者类型的游戏。我在让GKObstacleGraph使用磁贴地图时遇到了麻烦。请帮帮我!我尝试循环遍历tilemap的障碍层中的所有瓦片,并为每个瓦片创建一个多边形,并将其存储在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个节点,太多的寻路路径。任何帮助都将不胜感激。
发布于 2016-12-02 15:04:29
我不确定在这里GKObstacleGraph是不是正确的选择。根据GameplayKit documentation的说法
例如,可以在Xcode中使用SpriteKit场景编辑器设计关卡,并使用物理实体标记玩家(或其他游戏实体)无法通过的区域,然后使用obstaclesFromNodePhysicsBodies:方法生成标记不可通过区域的GKPolygonObstacle对象。
使用函数obstaclesFromNodePhysicsBodies来提取障碍物并创建图形;
let obstacles = SKNode.obstaclesFromNodePhysicsBodies(self.children)
graph = GKObstacleGraph(obstacles: obstacles, bufferRadius: 0.0)对于表示笛卡尔网格的SKTilemapNode,GKGridGraph似乎是可能的选择。
https://stackoverflow.com/questions/40919553
复制相似问题