首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >让GKObstacleGraph与SKTileMapNode协同工作

让GKObstacleGraph与SKTileMapNode协同工作
EN

Stack Overflow用户
提问于 2016-12-02 04:12:58
回答 1查看 546关注 0票数 2

我目前正在使用Xcode8,使用Swift 3和SpritKit的新SKTileMapNode来制作2D地下城爬行者类型的游戏。我在让GKObstacleGraph使用磁贴地图时遇到了麻烦。请帮帮我!我尝试循环遍历tilemap的障碍层中的所有瓦片,并为每个瓦片创建一个多边形,并将其存储在GKObstacleGraph中。障碍层中的每一块瓷砖都是一块墙瓷砖。这张地图看起来像某种地牢爬行器,所以墙到处都是。我有一些类似下面的东西:

代码语言:javascript
复制
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个节点,太多的寻路路径。任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-12-02 15:04:29

我不确定在这里GKObstacleGraph是不是正确的选择。根据GameplayKit documentation的说法

例如,可以在Xcode中使用SpriteKit场景编辑器设计关卡,并使用物理实体标记玩家(或其他游戏实体)无法通过的区域,然后使用obstaclesFromNodePhysicsBodies:方法生成标记不可通过区域的GKPolygonObstacle对象。

使用函数obstaclesFromNodePhysicsBodies来提取障碍物并创建图形;

代码语言:javascript
复制
let obstacles = SKNode.obstaclesFromNodePhysicsBodies(self.children)
graph = GKObstacleGraph(obstacles: obstacles, bufferRadius: 0.0)

对于表示笛卡尔网格的SKTilemapNodeGKGridGraph似乎是可能的选择。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40919553

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档